Java 8 Streams:如何调用Collection.stream()方法并检索多个聚合值的数组

我从Java 8中的Stream API开始。

这是我使用的Person对象:

public class Person { private String firstName; private String lastName; private int age; public Person(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public int getAge() { return age; } } 

这是我的代码,它初始化一个对象列表Person,它获取对象的数量,最大年龄和最小年龄,最后创建一个包含这三个值的对象数组:

 List personsList = new ArrayList(); personsList.add(new Person("John", "Doe", 25)); personsList.add(new Person("Jane", "Doe", 30)); personsList.add(new Person("John", "Smith", 35)); long count = personsList.stream().count(); int maxAge = personsList.stream().mapToInt(Person::getAge).max().getAsInt(); int minAge = personsList.stream().mapToInt(Person::getAge).min().getAsInt(); Object[] result = new Object[] { count, maxAge, minAge }; System.out.println(Arrays.toString(result)); 

是否可以对stream()方法执行单个调用并直接返回对象数组?

 Object[] result = personsList.stream()...count()...max()...min() 

以下是使用标准JDK 8 API解决此问题的方法:

 IntSummaryStatistics summary = personsList.stream().collect( Collectors.summarizingInt(Person::getAge)); System.out.println("Count: " + summary.getCount()); System.out.println("Max : " + summary.getMax()); System.out.println("Min : " + summary.getMin()); 

结果:

 Count: 3 Max : 35 Min : 25