AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Stream很好,Map很酷,但答應我別用toMap()

來源: 責編: 時間:2024-07-10 17:58:37 729觀看
導讀在 JDK 8 中 Java 引入了讓人欲罷不能的 stream 流處理,可以說已經(jīng)成為了我日常開發(fā)中不可或缺的一部分。當完成一次流處理之后需要返回一個集成對象時,已經(jīng)肌肉記憶的敲下 collect(Collectors.toList()) 或者 collect(

在 JDK 8 中 Java 引入了讓人欲罷不能的 stream 流處理,可以說已經(jīng)成為了我日常開發(fā)中不可或缺的一部分。o5H28資訊網(wǎng)——每日最新資訊28at.com

當完成一次流處理之后需要返回一個集成對象時,已經(jīng)肌肉記憶的敲下 collect(Collectors.toList()) 或者 collect(Collectors.toSet())。你可能會想,toList 和 toSet 都這么便捷順手了,當又怎么能少得了 toMap() 呢。o5H28資訊網(wǎng)——每日最新資訊28at.com

答應我,一定打消你的這個想法,否則這將成為你噩夢的開端。o5H28資訊網(wǎng)——每日最新資訊28at.com

o5H28資訊網(wǎng)——每日最新資訊28at.com

什么?你不信,沒有什么比代碼讓人更痛徹心扉,讓我們直接上代碼。o5H28資訊網(wǎng)——每日最新資訊28at.com

讓我們先準備一個用戶實體類。o5H28資訊網(wǎng)——每日最新資訊28at.com

@Data@AllArgsConstructor  public class User {        private int id;          private String name;  }

假設有這么一個場景,你從數(shù)據(jù)庫讀取 User 集合,你需要將其轉(zhuǎn)為 Map 結(jié)構(gòu)數(shù)據(jù),key 和 value 分別為 user 的 id 和 name。o5H28資訊網(wǎng)——每日最新資訊28at.com

很快,你啪的一下就寫出了下面的代碼:o5H28資訊網(wǎng)——每日最新資訊28at.com

public class UserTest {    @Test    public void demo() {          List<User> userList = new ArrayList<>();        // 模擬數(shù)據(jù)        userList.add(new User(1, "Alex"));          userList.add(new User(1, "Beth"));        Map<Integer, String> map = userList.stream()                  .collect(Collectors.toMap(User::getId, User::getName));          System.out.println(map);      }}

運行程序,你已經(jīng)想好了開始怎么摸魚,結(jié)果啪的一下 IllegalStateException 報錯就拍你臉上,你定睛一看怎么提示 Key 值重復。o5H28資訊網(wǎng)——每日最新資訊28at.com

o5H28資訊網(wǎng)——每日最新資訊28at.com

作為優(yōu)秀的八股文選手,你清楚的記得 HashMap 對象 Key 重復是進行替換。你不信邪,斷點一打,堆棧一看,碩大的 uniqKeys 擺在了面前,憑借四級 424 分的優(yōu)秀戰(zhàn)績你頓時菊花一緊,點開一看,誰家好人 map key 還要去重判斷啊。o5H28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片o5H28資訊網(wǎng)——每日最新資訊28at.com

好好好,這么玩是吧,你轉(zhuǎn)身打開瀏覽器一搜,原來需要自己手動處理重復場景,啪的一下你又重新改了一下代碼:o5H28資訊網(wǎng)——每日最新資訊28at.com

public class UserTest {    @Test    public void demo() {          List<User> userList = new ArrayList<>();        // 模擬數(shù)據(jù)        userList.add(new User(1, "Alex"));          userList.add(new User(2, null));                Map<Integer, String> map = userList.stream()                  .collect(Collectors.toMap(User::getId, User::getName, (oldData, newData) -> newData));          System.out.println(map);      }}

再次執(zhí)行程序,你似乎已經(jīng)看到知乎的摸魚貼在向你招手了,結(jié)果啪的一下 NPE 又拍在你那笑容漸漸消失的臉上。o5H28資訊網(wǎng)——每日最新資訊28at.com

o5H28資訊網(wǎng)——每日最新資訊28at.com

靜下心來,本著什么大風大浪我沒見過的心態(tài),斷點堆棧一氣呵成,而下一秒你又望著代碼陷入了沉思,我是誰?我在干什么?o5H28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片o5H28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片o5H28資訊網(wǎng)——每日最新資訊28at.com

鼓起勇氣,你還不信今天就過不去這個坎了,大手一揮,又一段優(yōu)雅的代碼孕育而生。o5H28資訊網(wǎng)——每日最新資訊28at.com

public class UserTest {    @Test    public void demo() {          List<User> userList = new ArrayList<>();        // 模擬數(shù)據(jù)        userList.add(new User(1, "Alex"));          userList.add(new User(1, "Beth"));        userList.add(new User(2, null));                Map<Integer, String> map = userList.stream()                  .collect(Collectors.toMap(                      User::getId,                      it -> Optional.ofNullable(it.getName()).orElse(""),                      (oldData, newData) -> newData)                  );        System.out.println(map);      }}

優(yōu)雅,真是太優(yōu)雅了,又是 Stream 又是 Optional,可謂是狠狠拿捏技術(shù)博文的 G 點了。o5H28資訊網(wǎng)——每日最新資訊28at.com

這時候你回頭一看,我需要是什么來著?這 TM 不是一個循環(huán)就萬事大吉了嗎,不信邪的你回歸初心,回歸了 for 循環(huán)的懷抱,又寫了一版。o5H28資訊網(wǎng)——每日最新資訊28at.com

public class UserTest {    @Test    public void demo() {          List<User> userList = new ArrayList<>();        // 模擬數(shù)據(jù)        userList.add(new User(1, "Alex"));          userList.add(new User(1, "Beth"));        userList.add(new User(2, null));          Map<Integer, String> map = new HashMap<>();          userList.forEach(it -> {              map.put(it.getId(), it.getName());          });          System.out.println(map);    }}

看著運行完美無缺的代碼,你一時陷入了沉思,數(shù)分鐘過去了,你刪除了 for 循環(huán),換上 Stream 與 Optional 不羈的外衣,安心的提交了代碼,這口細糠一定也要讓好同事去嘗一嘗。o5H28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-100191-0.htmlStream很好,Map很酷,但答應我別用toMap()

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 最近很火的Vue Vine是如何實現(xiàn)一個文件中寫多個組件

下一篇: Rust模式:使用Box::leak創(chuàng)建一個&amp;'static引用

標簽:
  • 熱門焦點
  • 俄羅斯:將審查iPhone等外國公司設備 保數(shù)據(jù)安全

    iPhone和特斯拉都屬于在各自領(lǐng)域領(lǐng)頭羊的品牌,推出的產(chǎn)品也也都是數(shù)一數(shù)二的,但對于一些國家而言,它們的產(chǎn)品可靠性和安全性還是在限制范圍內(nèi)。近日,俄羅斯聯(lián)邦通信、信息技術(shù)
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業(yè)務的發(fā)展,組織規(guī)模的擴大,越來越多的企業(yè)開始意識到協(xié)作效率對于企業(yè)團隊的重要性,甚至是決定其在某個行業(yè)競爭中突圍的關(guān)鍵,是企業(yè)長久生存的根本。得物
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬

    來源 | 電商在線文|易琬玉編輯|斯問受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、&ldquo;Ringdoll戒之人形&rdquo;淘寶店鋪有關(guān)外貌的評價,黃山已經(jīng)聽累了。生于1985年的他,哪
  • 阿里大調(diào)整

    來源:產(chǎn)品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • 到手價3099元起!iQOO Neo8 Pro今日首銷:安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發(fā)布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • 華為舉行春季智慧辦公新品發(fā)布會 首次推出電子墨水屏平板

    北京時間2月27日晚,華為在巴塞羅那舉行春季智慧辦公新品發(fā)布會,在海外市場推出之前已經(jīng)在中國市場上市的筆記本、平板、激光打印機等辦公產(chǎn)品,并首次推出搭載
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據(jù)10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
Top