📜  Java|带有示例的收集器 maxBy(Comparator 比较器)(1)

📅  最后修改于: 2023-12-03 14:42:42.576000             🧑  作者: Mango

Java|带有示例的收集器 maxBy(Comparator 比较器)

介绍

Java 8 引入了一个名为 maxBy 的收集器,该收集器使用指定的比较器比较对象,然后返回拥有指定属性中最大值的对象,或者如果最值不存在,则返回 null

该收集器是一个终止操作,可用于 Stream 对象。

语法
Optional<T> maxBy(Comparator<? super T> comparator)

该方法接收一个 Comparator 对象,用于比较 Stream 中的元素。返回一个 Optional 对象,表示符合指定条件的最大元素。如果流为空,则返回空的 Optional 对象。

示例

假设有一个列表,其中包含了若干个学生的成绩信息:

List<Student> studentList = Arrays.asList(
        new Student("Tom", 90),
        new Student("Jerry", 80),
        new Student("Alice", 95),
        new Student("Bob", 75)
);

要求找出成绩最高的学生,可以使用 maxBy 收集器:

Optional<Student> topStudent = studentList.stream()
        .collect(Collectors.maxBy(Comparator.comparing(Student::getScore)));

if (topStudent.isPresent()) {
    System.out.println("成绩最高的学生是:" + topStudent.get().getName());
}

运行结果如下:

成绩最高的学生是:Alice

在上面的例子中,使用了 Comparator.comparing 方法创建了一个比较器对象,用于比较 Student 对象的成绩属性。maxBy 收集器返回一个 Optional<Student> 对象,表示拥有最高成绩的学生,然后可以使用 Optional.isPresent() 方法判断是否有找到符合条件的学生,再使用 Optional.get() 方法取出学生对象,进一步操作该对象的属性。

总结

maxBy 收集器是一个简单但非常实用的收集器,它可以用于查找最值,而无需手动维护迭代过程中的最大/最小值。使用 Comparator 比较器来定义排序规则,使得该收集器适用于不同的排序需求。