If you want average of Stream elements there are handy utility methods available in Collectors class to quickly do that, the methods are-
- Collectors.averagingInt()- To get average of stream of integers.
- Collectors.averagingLong()- To get average of stream of longs.
- Collectors.averagingDouble()- To get average of stream of doubles.
Collectors.averaging methods in Java
Syntax of these methods is as given below-
Collector<T,?,Double> averagingInt(ToIntFunction<? super T> mapper) Collector<T,?,Double> averagingLong(ToLongFunction<? super T> mapper) Collector<T,?,Double> averagingDouble(ToDoubleFunction<? super T> mapper)
All of these methods return a Collector that produces the arithmetic mean of the values.
Argument passed is of type ToIntFunction, ToLongFunction and ToDoubleFunction respectively. These are
functional interfaces
with methods applyAsInt(T value)
, applyAsLong(T value)
,
applyAsDouble(T value)
that produces a int-valued, long-valued and double-valued result.
Collectors.averagingInt() example
In this example we’ll get the average of List elements where List is storing integers.
public class CollectorAveragingDemo { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(6, 7, 3, 8, 1); Double avg = numbers.stream().collect(Collectors.averagingInt(Integer::intValue)); System.out.println("Average of the list elements- " + avg); } }Output
Average of the list elements- 5.0
Collectors.averagingLong() example
In this example we’ll get the average of List elements where List is storing longs.
public class CollectorAveragingDemo { public static void main(String[] args) { // getting list of longs List<Long> numbers = Arrays.asList(22L, 17L, 3L, 38L, 11L); Double avg = numbers.stream().collect(Collectors.averagingLong(Long::longValue)); System.out.println("Average of the list elements- " + avg); } }Output
Average of the list elements- 18.2
Collectors.averagingDouble() example
In this example we’ll get the average of List elements where List is storing doubles.
public class CollectorAveragingDemo { public static void main(String[] args) { // getting list of longs List<Double> numbers = Arrays.asList(22.6, 17.4, 3.0, 57.7, 11.89); Double avg = numbers.stream().collect(Collectors.averagingDouble(Double::doubleValue)); System.out.println("Average of the list elements- " + avg); } }Output
Average of the list elements- 22.518
Collectors.averaging method with custom object
In this example we’ll use averaging methods to get the average marks and average age of the students.
Student classpublic class Student { private int rollNo; private String name; private int age; private double marks; Student(int rollNo, String name, int age, double marks){ this.rollNo = rollNo; this.name = name; this.age = age; this.marks = marks; } public int getRollNo() { return rollNo; } public String getName() { return name; } public int getAge() { return age; } public double getMarks() { return marks; } @Override public String toString() { return "Roll Number: " + getRollNo() + " Name: " + getName() + " Age: " + getAge() + " Marks: " + getMarks(); } }
public class CollectorAveragingDemo { public static void main(String[] args) { List<Student> studentList = Arrays.asList(new Student(1, "Mercy", 19, 75.5), new Student(2, "Ram", 20, 99.0), new Student(3, "Priscilla", 20, 68.5), new Student(4, "Jacques", 22, 97.0), new Student(5, "Peter", 19, 75.25)); // To get average marks of the Students Double avgMarks = studentList.stream() .collect(Collectors.averagingDouble(Student :: getMarks)); System.out.println("Average marks of the students- " + avgMarks); // To get average age of the Students Double avgAge = studentList.stream() .collect(Collectors.averagingInt(Student :: getAge)); System.out.println("Average age of the students- " + avgAge); } }Output
Average marks of the students- 83.05 Average age of the students- 20.0
That's all for the topic Java Stream Collectors averagingInt(), averagingLong(), averagingDouble(). If something is missing or you have something to share about the topic please write a comment.
You may also like
- Java Stream Collectors summingInt(), summingLong(), summingDouble()
- Java Stream Collectors.collectingAndThen() Examples
- Convert Java Stream to Array - toArray() method
- Versioning Using serialVersionUID in Java
- ZonedDateTime in Java With Examples
- Java var Type (Local Variable Type Inference)
- How to Convert File to Byte Array in Java
- Spring @Autowired Annotation
- Speculative Execution in Hadoop Framework
- React Example - Insert New Object in an Array
No comments:
Post a Comment