我想請(qǐng)求一些代碼的解釋,我將其作為我在
Java課程中進(jìn)行的練習(xí)的解決方案.
練習(xí)是我有一個(gè)List<> of Employees,具有各種屬性(薪水,姓名,姓氏,電子郵件……),我正在嘗試檢索收入最高的員工并打印他們的姓名和薪水.
我能夠檢索最高薪水而不是員工姓名,如下所示:
Integer maxSalary;
maxSalary = roster
.stream()
.map(Employee :: getSalary)
.collect(Collectors.reducing(Integer :: max)
.get();
然后我給了這個(gè)小塊代碼,它完全正常但我不太確定它為什么有效:
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.");
我知道這是一個(gè)使用.max的Lambda表達(dá)式我似乎無(wú)法理解為什么以及如何工作?
Optional max(Comparator super T> comparator)解釋了這一切.
由于問題的目的是找到薪水最高的員工,因此將流直接傳遞給.max,這會(huì)消耗員工比較器.由于比較器是功能接口,因此可以作為lambda傳遞.
.max已經(jīng)實(shí)現(xiàn)了自java 8以來(lái)可用的更一般的reduce和collect操作的版本
Integer.compare比較兩個(gè)int數(shù)字.因此.max()返回薪水最高的員工.
另一方面,你的嘗試是專門試圖獲得最高薪水.
干杯.快樂流媒體.
因篇幅問題不能全部顯示,請(qǐng)點(diǎn)此查看更多更全內(nèi)容
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2
違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬(wàn)商天勤律師事務(wù)所王興未律師提供法律服務(wù)