激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中List常用操作比for循環(huán)更優(yōu)雅的寫法示例

Java中List常用操作比for循環(huán)更優(yōu)雅的寫法示例

2022-03-10 00:54Mr泰迪 Java教程

List是Java中比較常用的集合類,關于List接口有很多實現(xiàn)類,下面這篇文章主要給大家介紹了關于Java中List常用操作比for循環(huán)更優(yōu)雅的寫法,需要的朋友可以參考下

引言

使用JDK1.8之后,大部分list的操作都可以使用lambda表達式去寫,可以讓代碼更簡潔,開發(fā)更迅速。以下是我在工作中常用的lambda表達式對list的常用操作,喜歡建議收藏。

以用戶表為例,用戶實體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
public class User {
    private Integer id; //id
 
    private String name; //姓名
 
    private Integer age; //年齡
 
    private Integer departId; //所屬部門id
}
 
List<User> list = new ArrayList<>();

簡單遍歷

使用lambda表達式之前,如果需要遍歷list時,一般使用增強for循環(huán),代碼如下:

?
1
2
3
4
List<User> list = new ArrayList<>();
for (User u:list) {
    System.out.println(u.toString());
}

使用lambda表達式之后,可以縮短為一行代碼:

?
1
list.forEach(u-> System.out.println(u.toString()));

篩選符合某屬性條件的List集合

以篩選年齡在15-17之間的用戶為例,for循環(huán)寫法為:

?
1
2
3
4
5
6
List<User> users = new ArrayList<>();
for (User u : list) {
    if (u.getAge() >= 15 && u.getAge() <= 17) {
        users.add(u);
    }
}

使用lambda表達式寫法為:

?
1
2
3
List<User> users = list.stream()
                           .filter(u -> u.getAge() >= 15 && u.getAge() <= 17)
                           .collect(Collectors.toList());

獲取某屬性返回新的List集合

以獲取id為例,項目中有時候可能會需要根據(jù)用戶id的List進行查詢或者批量更新操作,這時候就需要用戶id的List集合,for循環(huán)寫法為:

?
1
2
3
4
List<Integer> ids = new ArrayList<>();
for (User u:list) {
    ids.add(u.getId());
}

lambda表達式寫法為:

?
1
2
3
List<User> users = list.stream()
                           .filter(u -> u.getAge() >= 15 && u.getAge() <= 17)
                           .collect(Collectors.toList());

獲取以某屬性為key,其他屬性或者對應對象為value的Map集合

以用戶id為key(有時可能需要以用戶編號為key),以id對應的user作為value構建Map集合,for循環(huán)寫法為:

?
1
2
3
4
5
6
Map<Integer,User> userMap = new HashMap<>();
for (User u:list) {
    if (!userMap.containsKey(u.getId())){
        userMap.put(u.getId(),u);
    }
}

lambda表達式寫法為:

?
1
2
3
4
Map<Integer,User> map = list.stream()
                                     .collect(Collectors.toMap(User::getId,
                                     Function.identity(),
                                     (m1,m2)->m1));

Function.identity()返回一個輸出跟輸入一樣的Lambda表達式對象,等價于形如t -> t形式的Lambda表達式。
(m1,m2)-> m1此處的意思是當轉換map過程中如果list中有兩個相同id的對象,則map中存放的是第一個對象,此處可以根據(jù)項目需要自己寫。

以某個屬性進行分組的Map集合

以部門id為例,有時需要根據(jù)部門分組,篩選出不同部門下的人員,如果使用for循環(huán)寫法為:

?
1
2
3
4
5
6
7
8
9
10
Map<Integer,List<User>> departGroupMap = new HashMap<>();
for (User u:list) {
 if (departGroupMap.containsKey(u.getDepartId())){
            departGroupMap.get(u.getDepartId()).add(u);
 }else {
            List<User> users1 = new ArrayList<>();
            users1.add(u);
            departGroupMap.put(u.getDepartId(),users1);
 }
}

使用lambda表達式寫法為:

?
1
2
3
Map<Integer,List<User>> departGroupMap = list.stream()
                                                                 .collect(Collectors
                                                                 .groupingBy(User::getDepartId));

其他情況

可以根據(jù)需要結合stream()進行多個操作,比如篩選出年齡在15-17歲的用戶,并且根據(jù)部門進行分組分組,如果使用for循環(huán),代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
Map<Integer,List<User>> departGroupMap = new HashMap<>();
for (User u:list) {
    if (u.getAge() >= 15 && u.getAge() <= 17) {
        if (departGroupMap.containsKey(u.getDepartId())){
            departGroupMap.get(u.getDepartId()).add(u);
        }else {
            List<User> users1 = new ArrayList<>();
            users1.add(u);
            departGroupMap.put(u.getDepartId(),users1);
        }
    }
}

使用lambda表達式,代碼如下:

?
1
2
3
Map<Integer,List<User>> departGroupMap = list.stream()
                                                               .filter(u->u.getAge() >= 15 && u.getAge() <= 17)
                                                               .collect(Collectors.groupingBy(User::getDepartId));

總結

上述部分是小編在工作中遇到的常用的單個List的操作,可能在項目中還會遇到更復雜的場景,可以根據(jù)需要進行多個方法的組合使用,我的感覺是使用lambda表達式代碼更加簡潔明了,當然各人有各人的編碼習慣,不喜勿噴。

到此這篇關于Java中List常用操作比for循環(huán)更優(yōu)雅的寫法的文章就介紹到這了,更多相關Java中List常用操作內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/7023760357407916063

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久在草| 91社影院在线观看 | 久久精品国产99久久6动漫亮点 | 一级黄色在线免费观看 | 亚洲天堂在线电影 | 婷婷久久网 | 在线成人www免费观看视频 | 91网视频在线观看 | 欧美一区二区黄 | 欧美日韩国产中文字幕 | 国产精品久久久久久久久久东京 | 国产一区免费 | 欧美一级爱操视频 | 欧美日韩亚洲国产精品 | 舌头伸进添的我好爽高潮网站 | 国产成人精品免高潮在线观看 | 久久影院午夜 | 成av在线 | 欧美一区二区三区成人 | 99在线热播精品免费 | 特黄一区二区三区 | 欧美18一12sex性处hd | 国产一精品久久99无吗一高潮 | 涩涩激情网 | 成人午夜影院 | 成人午夜看片 | 大学生一级毛片 | 在线观看视频毛片 | 免费观看国产精品视频 | h色视频网站 | 久久69精品久久久久久国产越南 | 色99久久 | 免费a级黄色片 | 国产精品久久久久久久久久久天堂 | 欧美精品一区二区三区久久久 | 韩国美女一区 | 黄色美女网站免费看 | 国产亚洲欧美日韩在线观看不卡 | 精品国产一区二区久久 | 97zyz成人免费视频 | 久在线观看 |