成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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 不羈的外衣,安心的提交了代碼,這口細糠一定也要讓好同事去嘗一嘗。

責任編輯:武曉燕 來源: 程序員小富
相關推薦

2025-06-27 03:10:00

2024-11-05 10:24:50

2022-03-26 08:49:13

MySQL數據存儲

2018-02-06 08:42:10

永久內存XPoint閃存

2021-01-29 11:05:50

PrintPython代碼

2016-06-12 09:48:40

2016-05-03 09:48:58

2017-08-31 17:00:20

2023-11-29 08:19:45

Go泛型缺陷

2020-09-08 08:45:39

jupyter插件代碼

2021-09-10 08:00:00

Python機器學習開發

2021-03-17 16:53:51

IO多路

2018-04-10 13:40:14

Kubernetes容器服務器

2023-10-31 08:01:48

Mybatis參數jdbcurl?

2017-12-07 11:27:30

編程開發代碼

2025-04-09 03:00:00

簽字板代碼canvas

2021-02-07 10:17:22

項目架構技術管理

2021-04-07 20:01:23

Go變量常量

2021-05-21 14:26:18

ObjectMap前端

2015-08-18 17:28:44

奇酷樂視
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 6996成人影院网在线播放 | 欧美久久一区 | 精品国产视频 | 91一区二区 | 国产精品观看 | 亚洲男人天堂 | 久久久www成人免费无遮挡大片 | 成人亚洲网 | 国产一区二区电影 | 激情网站在线观看 | 91精品久久久久 | 日韩在线观看中文字幕 | 天天看逼 | 欧美在线观看免费观看视频 | 国产欧美一区二区三区在线播放 | 成年人免费网站 | 91久久精品 | 日韩一区二区在线播放 | 国产女人与拘做受免费视频 | 在线免费观看日本 | 夜夜av| 亚洲一区二区在线播放 | 日本精品久久 | 成人在线免费观看av | 国产成人精品久久二区二区91 | 一区中文字幕 | 国产精品一区一区三区 | 欧美日高清 | 国产美女在线观看 | 99国内精品久久久久久久 | 99精品免费久久久久久日本 | 激情欧美一区二区三区 | 六月色婷 | 超碰一区二区 | 久在线视频播放免费视频 | 精品久久久久一区二区国产 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 日韩欧美第一页 | 亚洲一区二区视频 | 综合成人在线 | 精品亚洲一区二区三区四区五区高 |