【问题标题】:Java 8 Streams: How to call once the Collection.stream() method and retrieve an array of several aggregate values [duplicate]Java 8 Streams:如何调用一次 Collection.stream() 方法并检索几个聚合值的数组[重复]
【发布时间】:2016-01-05 20:18:39
【问题描述】:

我从 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<Person> personsList = new ArrayList<Person>();

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()

【问题讨论】:

  • 使用IntSummaryStatisticspersonsList.stream().mapToInt(Person::getAge).summaryStatistics()
  • @Tunaki:虽然之前肯定有人问过这个问题,但与这个非常具体的问题相比,我认为你作为副本链接的那个是一个特别糟糕的例子......

标签: java java-8 java-stream


【解决方案1】:

以下是使用标准 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2019-10-03
    • 2014-07-26
    • 2018-04-08
    • 2020-01-18
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多