java8 list max_Java 在List <>上使用.max()和.stream()

我想请求一些代码的解释,我将其作为我在

Java课程中进行的练习的解决方案.

练习是我有一个List<> of Employees,具有各种属性(薪水,姓名,姓氏,电子邮件……),我正在尝试检索收入最高的员工并打印他们的姓名和薪水.

我能够检索最高薪水而不是员工姓名,如下所示:

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 max(Comparator super T> comparator)解释了这一切.

由于问题的目的是找到薪水最高的员工,因此将流直接传递给.max,这会消耗员工比较器.由于比较器是功能接口,因此可以作为lambda传递.

.max已经实现了自java 8以来可用的更一般的reduce和collect操作的版本

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

另一方面,你的尝试是专门试图获得最高薪水.

干杯.快乐流媒体.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值