我想要求解释一些代码,这些代码是我在 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
已经实现了更通用的版本reduce
和 collect
自 Java 8 以来可用的操作
Integer.compare
在数值上比较两个 int。因此 .max()
返回薪水最高的员工。
另一方面,您的尝试是专门尝试获得最高薪水。
干杯。快乐流媒体。
关于java - 在 List<> 上使用 .max() 和 .stream(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45256176/