java - 在 List<> 上使用 .max() 和 .stream()

标签 java list java-8 max java-stream

我想要求解释一些代码,这些代码是我在 Java 类(class)中做的练习的解决方案。 练习是我有一个 List<>具有各种属性(工资、姓名、姓氏、电子邮件...)的员工,我正在尝试检索收入最高的员工并打印他们的姓名和工资。

我能够检索到最高薪水,但无法检索到员工的姓名,如下所示:

Integer maxSalary;
maxSalary = roster
    .stream()
    .map(Employee :: getSalary)
    .collect(Collectors.reducing(Integer :: max)
    .get();

然后我得到了这个小代码块,它工作得很好,但我不太确定它为什么会工作:

Integer maxSalary;
Employee emp2 = roster
    .stream()
    .max((p1, p2) -> Integer.compare(p1.getSalary(), p2.getSalary()))
    .get();
System.out.println("The employee who earns the most is :" + emp2.getName + " and earns : " + emp2.getSalary + " a month.");

我知道这是一个使用 .max 的 Lambda 表达式我似乎无法理解它为什么以及如何工作?

最佳答案

Optional<T> max(Comparator<? super T> comparator) 解释一切。

由于问题的目的是找到薪水最高的员工,因此流直接传递给 .max消耗一名员工comparator .自 comparator是功能接口(interface),它可以作为lambda传入。 .max已经实现了更通用的版本reducecollect自 Java 8 以来可用的操作

Integer.compare 在数值上比较两个 int。因此 .max()返回薪水最高的员工。

另一方面,您的尝试是专门尝试获得最高薪水。

干杯。快乐流媒体。

关于java - 在 List<> 上使用 .max() 和 .stream(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45256176/

相关文章:

java - 尽管系统时钟不准确,仍解析 ISO_LOCAL_TIME

java system.getenv(HOME) 返回 tomcat6 目录

android - 无法使操作栏中的 SearchView 正常工作

list - 在集合中找到最频繁/常见的元素?

java流找到匹配还是最后一个?

java - 如何在 Flowable.generate 中使 Files.lines AutoCloseable

Java - 在 getter 方法中克隆属性

java - java中反序列化步骤

java.net.UnknowHostException 与 ksoap2

python - 基于Python中两个嵌套列表的匹配元素创建一个新列表?