Java8 中常用的List Stream場景

                  發表于:2023-3-17 09:12

                  字體: | 上一篇 | 下一篇 | 我要投稿

                   作者:自學編程之道    來源:今日頭條

                  #
                  Java
                  #
                  java
                  分享:
                    Stream是Java 8添加的一個API,結合Lambda表達式,可以提高我們對對集合處理的編碼效率。在日常工作中,我們經常會遇到List轉Map的情況,在Stream出來之前,我們一般都是遍歷放進map中。
                    這里,我們假設有個User對象。
                    @Getter
                    @Setter
                    public class User
                    {
                        private String id;
                        private String name;
                        private Integer age;
                    }
                    List轉Map
                    1. Map中key和value都是User對象中的屬性值。
                    2. Map<String, String> userMap = users.stream().collect(Collectors.toMap(User::getId, User::getName))。
                    3. Map中key為User對象的屬性值,value為User對象。
                    4. Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getId, User -> User))。
                    5. 如果,我們的List中,key值重復,則會出現Duplicate key異常,這時候,我們可以使用覆蓋的方式來避免這種異常。
                    6. Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity(), (oldVal, newVal) -> newVal))。
                    7. Map中key為User對象的屬性值,value為UserList。
                    Map<String, User> userMap = users.stream().collect(Collectors.groupingBy(User::getId));
                    filter
                    1. list stream過濾數據
                    2. List<User> filterUsers=users.stream().filter(item -> item.getName().equals("xxx")).collect(Collectors.toList());
                    3. 去重過濾
                    4. List<String> ids=new ArrayList<>(); List<User> distinctUsers=users.stream().filter(item->{ if(!ids.contains(item.getId())){ ids.add(item.getId()); return true; }else{ return false; } }).collect(Collectors.toList());
                    5. stream有提供distinct去重的函數。
                    sorted
                    1 .按年齡升序排。
                    List<User> sortUsers= users.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
                    2.按年齡降序排。
                    List<User> sortUsers= users.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
                    除了上面的一些函數外,還有功能強大的函數,如:limit、max、reduce等。
                    Java Stream Debugger
                    在我們使用Stream之后,調試是一個問題。
                    在IDEA 2018后,會自帶Java Stream Debugger這個插件,有助于我們更直觀的了解Stream的執行過程。插件有了,我們該如何使用呢?
                    1. 在需要調試Stream的地方,打上斷點。
                    2. debug模式啟動后,在debug窗口中點擊Trace Current Stream Chain
                    我們可以點擊切換上面每一步的tab,查看其執行的一個大致過程,我們也可以切換到Flat Mode模式。
                    這里只是列舉了幾個常用的API,針對Stream的能力遠比上面列舉幾個簡單的功能要強大。
                    本文內容不用于商業目的,如涉及知識產權問題,請權利人聯系51Testing小編(021-64471599-8017),我們將立即處理
                  重磅發布,2022軟件測試行業現狀調查報告~

                  關注51Testing

                  聯系我們

                  快捷面板 站點地圖 聯系我們 廣告服務 關于我們 站長統計

                  法律顧問:上海漕溪律師事務所 項棋律師
                  版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2023
                  投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

                  滬ICP備05003035號

                  滬公網安備 31010102002173號

                  亚洲欧洲自拍图片专区123_久久久精品人妻无码专区不卡_青青精品视频国产色天使_A免看的日黄亚洲