国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Stream 與 Map:toMap() 的使用需謹慎

開發 前端
當完成一次流處理之后需要返回一個集成對象時,已經肌肉記憶的敲下 collect(Collectors.toList()) 或者 collect(Collectors.toSet())。你可能會想,toList 和 toSet 都這么便捷順手了,又怎么能少得了 toMap() 呢。

在 JDK 8 中 Java 引入了讓人欲罷不能的 stream 流處理,可以說已經成為了我日常開發中不可或缺的一部分。

當完成一次流處理之后需要返回一個集成對象時,已經肌肉記憶的敲下 collect(Collectors.toList()) 或者 collect(Collectors.toSet())。你可能會想,toList 和 toSet 都這么便捷順手了,又怎么能少得了 toMap() 呢。

答應我,一定打消你的這個想法,否則這將成為你噩夢的開端。

什么?你不信,沒有什么比代碼讓人更痛徹心扉,讓我們直接上代碼。

讓我們先準備一個用戶實體類。

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

假設有這么一個場景,你從數據庫讀取 User 集合,你需要將其轉為 Map 結構數據,key 和 value 分別為 user 的 id 和 name。

很快,你啪的一下就寫出了下面的代碼:

public class UserTest {
    @Test
    public void demo() {  
        List<User> userList = new ArrayList<>();
        // 模擬數據
        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);  
    }
}

運行程序,你已經想好了開始怎么摸魚,結果啪的一下 IllegalStateException 報錯就拍你臉上,你定睛一看怎么提示 Key 值重復。

作為優秀的八股文選手,你清楚的記得 HashMap 對象 Key 重復是進行替換。你不信邪,斷點一打,堆棧一看,碩大的 uniqKeys 擺在了面前,憑借四級 424 分的優秀戰績你趕緊點開一看,誰家好人 map key 還要去重判斷啊。

圖片圖片

好好好,這么玩是吧,你轉身打開瀏覽器一搜,原來需要自己手動處理重復場景,啪的一下你又重新改了一下代碼:

public class UserTest {
    @Test
    public void demo() {  
        List<User> userList = new ArrayList<>();
        // 模擬數據
        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);  
    }
}

再次執行程序,你似乎已經看到知乎的摸魚貼在向你招手了,結果啪的一下 NPE 又拍在你那笑容漸漸消失的臉上。

靜下心來,本著什么大風大浪我沒見過的心態,斷點堆棧一氣呵成,而下一秒你又望著代碼陷入了沉思,我是誰?我在干什么?

圖片圖片

圖片圖片

鼓起勇氣,你還不信今天就過不去這個坎了,大手一揮,又一段優雅的代碼孕育而生。

public class UserTest {
    @Test
    public void demo() {  
        List<User> userList = new ArrayList<>();
        // 模擬數據
        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);  
    }
}

優雅,真是太優雅了,又是 Stream 又是 Optional,可謂是狠狠拿捏技術博文的 G 點了。

這時候你回頭一看,我需要是什么來著?這 TM 不是一個循環就萬事大吉了嗎,不信邪的你回歸初心,回歸了 for 循環的懷抱,又寫了一版。

public class UserTest {
    @Test
    public void demo() {  
        List<User> userList = new ArrayList<>();
        // 模擬數據
        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);
    }
}

看著運行完美無缺的代碼,你一時陷入了沉思,數分鐘過去了,你刪除了 for 循環,換上 Stream 與 Optional 不羈的外衣,安心的提交了代碼,這口細糠一定也要讓好同事去嘗一嘗。

就這,你就要拋棄 toMap?你這讓設計 toMap 的人,臉往哪擱。

解決的辦法有很多,其中最簡單的之一就是,給它第三個合并參數,解決沖突。因為Collectors.toMap這個方法其實是有三個參數的,第一個是key,第二個是value,第三個是發生沖突的合并規則。默認采用的就是沖突之后拋出異常的處理。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2009-02-19 20:36:30

VistavLite副作用

2010-07-05 09:46:42

Visual Stud

2025-06-27 03:10:00

2024-07-10 10:15:43

2010-11-15 10:22:35

中工網綜合

2009-08-16 09:25:55

Windows 7系統升級

2013-06-07 10:31:46

CIO虛擬化

2020-03-13 17:59:06

OA二開CIO觀點

2015-04-20 09:31:41

初創企業融資風險額度

2009-12-25 10:38:23

作戰計劃敏感部門USB使用

2018-01-29 09:28:44

2012-12-13 21:34:30

2016-05-31 14:28:21

云計算混合云

2010-11-23 14:09:39

數據中心托管

2013-04-12 10:00:40

美海軍CIO云計算

2011-10-19 09:19:23

云計算數據安全

2016-02-25 10:11:48

2013-09-09 18:21:14

2009-07-30 10:22:49

云計算服務器

2011-08-30 14:18:00

點贊
收藏

51CTO技術棧公眾號

欧美视频一二三区| 91九色偷拍| 日本免费在线视频| 欧美国产精品专区| 精品久久久久久无码中文野结衣| 亚洲激情中文在线| 欧美激情中文网| 欧美xnxx| 亚洲国产精品字幕| а_天堂中文在线| 日韩一区二区三区在线观看 | 99国产精品一区二区| 久久久国产精品x99av| 日韩在线影院| 日韩电影免费观看中文字幕| 免费看电影在线| 精品国产伦一区二区三区观看方式 | 亚洲r级在线视频| 免费观看羞羞视频网站| 国产精品网站在线播放| 国产男女激情视频| 中文字幕久久午夜不卡| 免费观看成人在线视频| 中文字幕不卡一区| 国产免费视频| 亚洲国产乱码最新视频| 亚洲日本va中文字幕久久| 欧美性生交xxxxxdddd| 青青操视频在线| 欧美亚洲一区二区三区四区| 日本黄在线观看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日韩av免费观影| 欧美色老头old∨ideo| 麻豆影视在线观看_| 亚洲激情视频在线| 日韩电影精品| 国产成人精品久久久| 99久久久久| 日韩高清av| 99久久99精品久久久久久| 性生活免费在线观看| 亚洲高清免费观看| 国产在线二区| 亚洲欧美日本另类| 久久影院资源站| 国产日产欧美a一级在线| 亚洲资源av| 国产精品久久久久9999爆乳| 久久精品一级爱片| a视频免费看| 欧美偷拍一区二区| 欧美极品影院| 欧美一级大片在线免费观看| 欧美激情无毛| 91视频成人免费| 日韩美女精品在线| av片在线看| 在线中文字幕日韩| 欧美一区二区三区激情视频| 久久草.com| 久久综合五月天婷婷伊人| 天堂资源av| 亚洲成av人乱码色午夜| 涩爱av色老久久精品偷偷鲁 | 精品av导航| 国产精品二区在线| 国产大陆精品国产| 日韩写真在线| 国产午夜精品久久久| 婷婷成人影院| 日本在线观看不卡| 国产精品天美传媒| 182tv在线播放| 高清在线视频日韩欧美| 亚洲精品影院在线观看| 久草在在线视频| 欧美视频第二页| 成人性生交大片免费看96| 精品久久蜜桃| 国产欧美一区视频| 182tv在线播放| 欧洲日韩成人av| 久久99精品一区二区三区三区| 狠狠操夜夜操| 一本一道久久a久久精品逆3p| 日韩成人激情| 国产亚洲欧美在线视频| 欧美二区三区的天堂| 美女视频免费精品| 久久久久久久香蕉| 欧美三级电影在线观看| 日韩欧美中文字幕电影| 亚洲小视频在线播放| 在线观看日产精品| 加勒比视频一区| 青青草综合视频| 欧美日韩三级在线| 牲欧美videos精品| 91网站在线观看免费| 91精品国产美女浴室洗澡无遮挡| 西野翔中文久久精品字幕| 免费高清一区二区三区| 欧美一区2区视频在线观看| 成人在线免费小视频| 欧美xxxxx在线视频| 日韩电影大片中文字幕| 国内精品久久久久久久97牛牛 | 免费理论片在线观看播放老| xxxxxxxxx欧美| 另类人妖一区二区av| 欧洲毛片在线| 日本免费一区二区三区视频观看| 成人精品国产一区二区4080| 国产蜜臀一区二区打屁股调教| 亚洲中国色老太| 一个色综合网站| 噜噜噜狠狠夜夜躁精品仙踪林| 国产精品视频一二三四区| 欧美一区二区三区思思人| 99精品在线观看| 蜜桃一级网站.| 午夜免费在线观看精品视频| 99久久久精品免费观看国产蜜| 超碰成人av| 日本视频一区二区在线观看| 欧美伊人久久久久久久久影院| 经典一区二区| 快播av资源| 国产精品精品视频| 一个色在线综合| 久9久9色综合| 国产传媒在线视频| 国产欧美日韩综合精品| 91丝袜在线| 豆国产97在线| 色婷婷综合久久久中文一区二区 | 久久久精品亚洲| 26uuu色噜噜精品一区二区| 免费欧美电影| 女人和拘做爰正片视频| 日韩亚洲成人av在线| 久久久亚洲午夜电影| 大伊香蕉精品在线品播放| 天天综合天天操| 日本久久中文字幕| 欧美日韩在线免费| 在线日韩视频| 最爽无遮挡行房视频在线| 午夜一区二区三视频在线观看| 日韩欧美亚洲国产另类| 国产一区在线精品| 精品久久毛片| 2020中文字幕在线| 成人妇女淫片aaaa视频| 欧美日韩一区二区三区在线| 奇米四色…亚洲| 51一区二区三区| 国产激情三区| 国产精品免费一区二区三区在线观看 | 久久久99精品视频| 色婷婷综合成人| 国产精品乱码一区二区三区软件| 日韩在线你懂的| 触手亚洲一区二区三区| 国产精品夜夜夜爽张柏芝| 波霸ol色综合久久| 亚洲国产一区二区在线播放| 亚洲片区在线| 欧美综合影院| 在线观看国产麻豆| 性欧美videosex高清少妇| 精品国产一区二区三区四区在线观看| 国产欧美一区二区精品性色超碰| 久久影院一区| 成年男女免费视频网站不卡| 好男人www社区| 国产精品久久久久久免费观看 | 亚洲国产专区校园欧美| 国产高清不卡| 日本搞黄视频| 亚洲成人蜜桃| 97av在线播放| 777色狠狠一区二区三区| 成人网页在线观看| 亚洲人成网站77777在线观看 | 亚洲成av人**亚洲成av**| 国产精品久久久一区二区| 久久夜夜操妹子| 日韩欧美国产精品一区二区三区| 美女视频久久| 欧美精品日韩www.p站| 欧美日韩在线视频首页| 成人在线视频一区| 一区二区三区国产精华| 成人精品一区二区三区电影| 激情小视频在线| 中文字幕第36页| 日韩av不卡播放| 国产精品网站视频|