java8 分组取最大值

您可以使用Java 8 中的Stream API和Collectors API来实现分组并取最大值。下面是一个示例代码:

List<Person> persons = Arrays.asList(
    new Person("Max", 18),
    new Person("Peter", 23),
    new Person("Pamela", 23),
    new Person("David", 12));
Map<Integer, Optional<Person>> oldestPersonOfAge =
    persons.stream()
           .collect(Collectors.groupingBy(Person::getAge,
                 Collectors.maxBy(Comparator.comparing(Person::getName))));

在上面的代码中,我们首先创建了一个包含多个Person对象的列表,然后使用Stream API将其转换为流,并使用Collectors API的groupingBy方法将其分组。该方法接受两个参数:一个是分组的键,即Person对象的年龄;另一个是聚合函数,即取每组中名字最大的人。

最后,我们得到了一个Map,其中键是年龄,值是该年龄组中最大的人。

  •