Java8中stream流的collectingAndThen方法應(yīng)用實(shí)例詳解
1.方法定義:
此方法是在進(jìn)行歸納動作結(jié)束之后,對歸納的結(jié)果進(jìn)行二次處理。
2.代碼演示:
User類準(zhǔn)備
/** * @desc: 用戶實(shí)體類 * @author: shy * @date: 2020/12/28 12:38 */ @Data @AllArgsConstructor public class User { //用戶Id int userId; //用戶姓名 String userName; //用戶工資 Double salary; }
數(shù)據(jù)填充
//數(shù)據(jù)準(zhǔn)備 User user1 = new User(1, "hangman", 100d); User user2 = new User(1, "list", 200d); User user3 = new User(2, "wing", 200d); User user4 = new User(2, "zeal", 100d); User user5 = new User(3, "tuba", 300d); List<User> userList = new ArrayList<>(); userList.add(user1); userList.add(user2); userList.add(user3); userList.add(user4); userList.add(user5);
1.對集合根據(jù)Id進(jìn)行去重并返回去重后的List:
//對集合的結(jié)果進(jìn)行去重 List<User> list = userList.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getUserId))), ArrayList::new)); System.out.println(list);
2.對集合根據(jù)Id進(jìn)行去重并返回去重后的Map:
//對集合的結(jié)果進(jìn)行去重 Map<Integer, User> userMap = userList.stream() .collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getId))), treeSet -> treeSet.stream().collect(Collectors.toMap(User::getId, user -> user, (u1, u2) -> u1)) )); System.out.println(userMap);
3.查找工資最高的員工的姓名:
//查找工資最高的員工的姓名 String userName = userList.stream() .collect(Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(User::getSalary)),(Optional<User> user) -> user.map(User::getUserName).orElse(null))); System.out.println(userName);
4.計(jì)算用戶工資的平均值:
//計(jì)算用戶工資的平均值 Double avgSalary = userList.stream() .collect(Collectors.collectingAndThen(Collectors.averagingDouble(User::getSalary), Double::doubleValue)); System.out.println(avgSalary);
3.總結(jié):
通過上面的例子,我們可以熟練的使用collectingAndThen進(jìn)行歸納的結(jié)果進(jìn)行二次處理。
到此這篇關(guān)于Java8中stream流的collectingAndThen方法應(yīng)用實(shí)例的文章就介紹到這了,更多相關(guān)java8 stream流 collectingAndThen內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java8列表中通過stream流根據(jù)對象屬性去重的三種方式
- Java8新特性Stream流中anyMatch和allMatch和noneMatch的區(qū)別解析
- Java8使用Stream流實(shí)現(xiàn)List列表查詢、統(tǒng)計(jì)、排序以及分組
- Java8實(shí)現(xiàn)Stream流的合并的方法展示
- Java8中Stream流求最大值最小值的實(shí)現(xiàn)示例
- Java8-Stream流操作List去重問題
- Java8?Stream流多字段求和、匯聚的實(shí)例
- Java Stream map, Collectors(toMap, toList, toSet, groupingBy, collectingAndThen)使用案例
相關(guān)文章
Java多線程并發(fā)執(zhí)行demo代碼實(shí)例
這篇文章主要介紹了Java多線程并發(fā)執(zhí)行demo代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06idea中無法自動裝配未找到 ‘XXXXXXX‘ 類型的 Bean
本文主要介紹了idea中無法自動裝配未找到 ‘XXXXXXX‘ 類型的 Bean的原因及三種解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03java客戶端線上Apollo服務(wù)端的實(shí)現(xiàn)
這篇文章主要介紹了java客戶端線上Apollo服務(wù)端的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08SpringCloud協(xié)同開發(fā)實(shí)現(xiàn)方法淺析
好幾個(gè)人同時(shí)開發(fā)同一個(gè)服務(wù)上的不同模塊,導(dǎo)致你需要調(diào)試的接口總是被路由到別人的服務(wù)上,非常影響調(diào)試的效率,而且人越多越難受,總是請求不到自己的服務(wù),這篇文章主要介紹了SpringCloud協(xié)同開發(fā)實(shí)現(xiàn)方法2022-12-12Java高級之虛擬機(jī)加載機(jī)制的實(shí)例講解
下面小編就為大家分享一篇Java高級之虛擬機(jī)加載機(jī)制的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12Java設(shè)計(jì)模式詳解之門面模式(外觀模式)
為子系統(tǒng)中的一組接口提供一個(gè)一致的界面, Facade 模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。本文給大家介紹Java設(shè)計(jì)模式詳解之門面模式(外觀模式),感興趣的朋友參考下吧2016-04-04Mybatis一對一延遲加載實(shí)現(xiàn)過程解析
這篇文章主要介紹了Mybatis一對一延遲加載實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10java中Sources目錄Resources目錄的區(qū)別解讀
這篇文章主要介紹了java中Sources目錄Resources目錄的區(qū)別解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12