最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中List常用操作比f(wàn)or循環(huán)更優(yōu)雅的寫(xiě)法示例

 更新時(shí)間:2021年11月03日 15:16:02   作者:Mr泰迪  
List是Java中比較常用的集合類(lèi),關(guān)于List接口有很多實(shí)現(xiàn)類(lèi),下面這篇文章主要給大家介紹了關(guān)于Java中List常用操作比f(wàn)or循環(huán)更優(yōu)雅的寫(xiě)法,需要的朋友可以參考下

引言

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

以用戶(hù)表為例,用戶(hù)實(shí)體代碼如下:

public class User {
    private Integer id; //id

    private String name; //姓名

    private Integer age; //年齡

    private Integer departId; //所屬部門(mén)id
}

List<User> list = new ArrayList<>();

簡(jiǎn)單遍歷

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

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

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

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

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

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

List<User> users = new ArrayList<>();
for (User u : list) {
	if (u.getAge() >= 15 && u.getAge() <= 17) {
		users.add(u);
	}
}

使用lambda表達(dá)式寫(xiě)法為:

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

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

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

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

lambda表達(dá)式寫(xiě)法為:

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

獲取以某屬性為key,其他屬性或者對(duì)應(yīng)對(duì)象為value的Map集合

以用戶(hù)id為key(有時(shí)可能需要以用戶(hù)編號(hào)為key),以id對(duì)應(yīng)的user作為value構(gòu)建Map集合,for循環(huán)寫(xiě)法為:

Map<Integer,User> userMap = new HashMap<>();
for (User u:list) {
	if (!userMap.containsKey(u.getId())){
		userMap.put(u.getId(),u);
	}
}

lambda表達(dá)式寫(xiě)法為:

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

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

以某個(gè)屬性進(jìn)行分組的Map集合

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

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表達(dá)式寫(xiě)法為:

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

其他情況

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

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表達(dá)式,代碼如下:

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

總結(jié)

上述部分是小編在工作中遇到的常用的單個(gè)List的操作,可能在項(xiàng)目中還會(huì)遇到更復(fù)雜的場(chǎng)景,可以根據(jù)需要進(jìn)行多個(gè)方法的組合使用,我的感覺(jué)是使用lambda表達(dá)式代碼更加簡(jiǎn)潔明了,當(dāng)然各人有各人的編碼習(xí)慣,不喜勿噴。

到此這篇關(guān)于Java中List常用操作比f(wàn)or循環(huán)更優(yōu)雅的寫(xiě)法的文章就介紹到這了,更多相關(guān)Java中List常用操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java循環(huán)結(jié)構(gòu)、數(shù)組的使用小結(jié)

    java循環(huán)結(jié)構(gòu)、數(shù)組的使用小結(jié)

    這篇文章主要介紹了java循環(huán)結(jié)構(gòu)、數(shù)組的使用小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • springboot jsp支持以及轉(zhuǎn)發(fā)配置方式

    springboot jsp支持以及轉(zhuǎn)發(fā)配置方式

    文章介紹了如何在Spring Boot項(xiàng)目中配置和使用JSP,并提供了一步一步的指導(dǎo),包括添加依賴(lài)、配置文件設(shè)置、控制器和視圖的使用
    2024-12-12
  • @RequestBody注解Ajax post json List集合數(shù)據(jù)請(qǐng)求400/415的處理

    @RequestBody注解Ajax post json List集合數(shù)據(jù)請(qǐng)求400/41

    這篇文章主要介紹了@RequestBody注解Ajax post json List集合數(shù)據(jù)請(qǐng)求400/415的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Spring Boot打war包的實(shí)例教程

    Spring Boot打war包的實(shí)例教程

    本篇文章主要介紹了Spring Boot打war包的實(shí)例教程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Feign Client超時(shí)時(shí)間設(shè)置不生效的解決方法

    Feign Client超時(shí)時(shí)間設(shè)置不生效的解決方法

    這篇文章主要為大家詳細(xì)介紹了Feign Client 超時(shí)時(shí)間設(shè)置不生效的原因與解決方法,具有一定的的參考價(jià)值,希望對(duì)大家有一定的幫助
    2025-04-04
  • JVM處理未捕獲異常的方法詳解

    JVM處理未捕獲異常的方法詳解

    這篇文章主要給大家介紹了關(guān)于JVM處理未捕獲異常的相關(guān)資料,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 淺談Java 中的引用類(lèi)型

    淺談Java 中的引用類(lèi)型

    Java開(kāi)發(fā)者肯定都很熟悉java中的4種引用類(lèi)型,它們從強(qiáng)到弱分別是:強(qiáng)引用、軟引用、弱引用和虛引用,下面我們?cè)敿?xì)看看這些引用類(lèi)型
    2020-02-02
  • LeetCode程序員面試題之無(wú)重復(fù)字符的最長(zhǎng)子串

    LeetCode程序員面試題之無(wú)重復(fù)字符的最長(zhǎng)子串

    Java計(jì)算無(wú)重復(fù)字符的最長(zhǎng)子串是一種常見(jiàn)的字符串處理算法,它的目的是找出一個(gè)字符串中無(wú)重復(fù)字符的最長(zhǎng)子串。該算法可以很好地解決一些字符串處理問(wèn)題,比如尋找字符串中重復(fù)字符的位置,以及計(jì)算字符串中無(wú)重復(fù)字符的最長(zhǎng)子串的長(zhǎng)度。
    2023-02-02
  • Spring Boot項(xiàng)目中集成微信支付v3

    Spring Boot項(xiàng)目中集成微信支付v3

    這篇文章主要介紹了Spring Boot項(xiàng)目中集成微信支付v3,幫助大家更好的理解和使用spring boot框架,感興趣的朋友可以了解下
    2021-01-01
  • 解決mybatis中resultType取出數(shù)據(jù)順序不一致的問(wèn)題

    解決mybatis中resultType取出數(shù)據(jù)順序不一致的問(wèn)題

    這篇文章主要介紹了解決mybatis中resultType取出數(shù)據(jù)順序不一致的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論

江都市| 莆田市| 嘉黎县| 肇州县| 来宾市| 克东县| 民和| 石门县| 云南省| 精河县| 和政县| 望城县| 平塘县| 扶绥县| 安仁县| 铁岭市| 安远县| 绥滨县| 观塘区| 临漳县| 康定县| 南靖县| 荔浦县| 衡东县| 三台县| 新蔡县| 舟山市| 密山市| 安宁市| 含山县| 高陵县| 萍乡市| 当雄县| 铜陵市| 闻喜县| 互助| 廉江市| 都昌县| 通渭县| 喜德县| 凌源市|