国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java Stream:List分組成Map或LinkedHashMap

這篇具有很好參考價值的文章主要介紹了Java Stream:List分組成Map或LinkedHashMap。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

在Java中,使用Stream API可以輕松地對集合進(jìn)行操作,包括將List轉(zhuǎn)換為Map或LinkedHashMap。本篇博客將演示如何利用Java Stream實(shí)現(xiàn)這兩種轉(zhuǎn)換,同時假設(shè)List中的元素是User對象。


1. 數(shù)據(jù)準(zhǔn)備

List<User> list = new ArrayList<>();
list.add(new User(1, "張三", "我是張三01"));
list.add(new User(2, "張三", "我是張三02"));
list.add(new User(3, "李四", "我是李四01"));
list.add(new User(4, "李四", "我是李四02"));
list.add(new User(5, "王五", "我是王五01"));
list.add(new User(6, "王五", "我是王五02"));

2. List轉(zhuǎn)Map(無序-默認(rèn))

List轉(zhuǎn)Map有兩種Map格式,分別是 Map<String, User>Map<String, List>,下面我將分別展示:

2.1 List轉(zhuǎn)Map<String, User>

轉(zhuǎn)換成Map<String, User>我們需要使用到Collectors.toMap方法:

//通過名字進(jìn)行分組,如果名字重復(fù)的話只取第一個:List轉(zhuǎn)Map<String, User>
Map<String, User> map01 = list.stream().collect(Collectors.toMap(User::getName, Function.identity(), (u1, u2) -> u1));
System.out.println(map01);

執(zhí)行結(jié)果:

{
李四=User(id=3, name=李四, note=我是李四01), 
張三=User(id=1, name=張三, note=我是張三01), 
王五=User(id=5, name=王五, note=我是王五01)
}

2.2 List轉(zhuǎn)Map<String, List<User>>

轉(zhuǎn)換成Map<String, List<User>>我們需要使用到Collectors.groupingBy方法:

//通過名字進(jìn)行分組,如果名字重復(fù)的話就分組成List:List轉(zhuǎn)Map<String, List<User>>
Map<String, List<User>> map02 = list.stream().collect(Collectors.groupingBy(User::getName));
System.out.println(map02);

執(zhí)行結(jié)果:

{
李四=[User(id=3, name=李四, note=我是李四01), User(id=4, name=李四, note=我是李四02)], 
張三=[User(id=1, name=張三, note=我是張三01), User(id=2, name=張三, note=我是張三02)], 
王五=[User(id=5, name=王五, note=我是王五01), User(id=6, name=王五, note=我是王五02)]
}

我們可以看到:map中打印出來的執(zhí)行結(jié)果并沒有按照List中添加的順序打印的

3. List轉(zhuǎn)LinkedHashMap(有序)

List轉(zhuǎn)LinkedHashMap也有兩種Map格式,分別是 LinkedHashMap<String, User>LinkedHashMap<String, List>,下面我將分別展示:

3.1 List轉(zhuǎn)LinkedHashMap<String, User>

轉(zhuǎn)換成LinkedHashMap<String, User>我們需要使用到Collectors.toMap方法:

//通過名字進(jìn)行分組,如果名字重復(fù)的話只取第一個:List轉(zhuǎn)LinkedHashMap<String, User>
Map<String, User> map03 = list.stream().collect(Collectors.toMap(User::getName, Function.identity(), (u1, u2) -> u1, LinkedHashMap::new));
System.out.println(map03);

執(zhí)行結(jié)果:

{
張三=User(id=1, name=張三, note=我是張三01), 
李四=User(id=3, name=李四, note=我是李四01), 
王五=User(id=5, name=王五, note=我是王五01)
}

3.2 List轉(zhuǎn)LinkedHashMap<String, List<User>>

轉(zhuǎn)換成LinkedHashMap<String, List<User>>我們需要使用到Collectors.groupingBy方法:

//通過名字進(jìn)行分組,如果名字重復(fù)的話就分組成List:List轉(zhuǎn)LinkedHashMap<String, List<User>>
Map<String, List<User>> map04 = list.stream().collect(Collectors.groupingBy(User::getName, LinkedHashMap::new, Collectors.toList()));
System.out.println(map04);

執(zhí)行結(jié)果:

{
張三=[User(id=1, name=張三, note=我是張三01), User(id=2, name=張三, note=我是張三02)], 
李四=[User(id=3, name=李四, note=我是李四01), User(id=4, name=李四, note=我是李四02)], 
王五=[User(id=5, name=王五, note=我是王五01), User(id=6, name=王五, note=我是王五02)]
}

我們可以看到:map中打印出來的執(zhí)行結(jié)果是按照List中添加的順序打印的

4. 總結(jié)

在List轉(zhuǎn)Map的過程中:
如果我們對Map中的順序沒要求,我們可以通過stream流將List轉(zhuǎn)換為默認(rèn)的HMap即可
如果我們對Map中的順序有要求,我們可以通過stream流將List轉(zhuǎn)換為LinkedHashMap才行文章來源地址http://www.zghlxwxcb.cn/news/detail-769346.html

5. 全部代碼

public static void test1() {
    List<User> list = new ArrayList<>();
    list.add(new User(1, "張三", "我是張三01"));
    list.add(new User(2, "張三", "我是張三02"));
    list.add(new User(3, "李四", "我是李四01"));
    list.add(new User(4, "李四", "我是李四02"));
    list.add(new User(5, "王五", "我是王五01"));
    list.add(new User(6, "王五", "我是王五02"));
    //通過名字進(jìn)行分組,如果名字重復(fù)的話只取第一個:List轉(zhuǎn)Map<String, User>
    Map<String, User> map01 = list.stream().collect(Collectors.toMap(User::getName, Function.identity(), (u1, u2) -> u1));
    System.out.println(map01);
    //通過名字進(jìn)行分組,如果名字重復(fù)的話就分組成List:List轉(zhuǎn)Map<String, List<User>>
    Map<String, List<User>> map02 = list.stream().collect(Collectors.groupingBy(User::getName));
    System.out.println(map02);
    //通過名字進(jìn)行分組,如果名字重復(fù)的話只取第一個:List轉(zhuǎn)LinkedHashMap<String, User>
    Map<String, User> map03 = list.stream().collect(Collectors.toMap(User::getName, Function.identity(), (u1, u2) -> u1, LinkedHashMap::new));
    System.out.println(map03);
    //通過名字進(jìn)行分組,如果名字重復(fù)的話就分組成List:List轉(zhuǎn)LinkedHashMap<String, List<User>>
    Map<String, List<User>> map04 = list.stream().collect(Collectors.groupingBy(User::getName, LinkedHashMap::new, Collectors.toList()));
    System.out.println(map04);
}
public class User {

    private Integer id;

    private String name;

    private String note;
}

到了這里,關(guān)于Java Stream:List分組成Map或LinkedHashMap的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java8使用stream流給List<Map<String,Object>>分組(多字段key)

    Java8使用 stream流 給ListMapString,Object根據(jù)字段key 分組 一、項(xiàng)目場景: 從已得到的List集合中,根據(jù)某一元素(這里指map的key)進(jìn)行分組,篩選出需要的數(shù)據(jù)。 如果是SQL的話則使用 group by 直接實(shí)現(xiàn),代碼的方式則如下: 使用到stream流的 Collectors.groupingBy() 方法。 二、代碼實(shí)現(xiàn) 1、首

    2024年02月02日
    瀏覽(87)
  • 使用java8 新特性stream流對List<Map<String, Object>>集合進(jìn)行遍歷、過濾、查詢、去重、排序、分組

    對于一個ListMapString, Object類型的數(shù)據(jù),可以使用Java 8的新特性stream流來進(jìn)行遍歷、過濾、查詢、去重、排序、分組等操作。 遍歷: 過濾: 查詢: 去重: 排序: 分組:

    2024年02月10日
    瀏覽(106)
  • 如何使用Stream流將List轉(zhuǎn)換為Map

    以下程序用到的基礎(chǔ)代碼:

    2024年02月04日
    瀏覽(18)
  • 使用stream流對List<Map<String, Object>>集合根據(jù)value進(jìn)行排序

    第一步:初始化數(shù)據(jù) ========================================================= 第二步:開始排序 ① 根據(jù)數(shù)字排序 打印結(jié)果 ② 根據(jù)字符串排序 打印結(jié)果 ③ 根據(jù)時間類型排序 打印結(jié)果 總結(jié):String類型是萬金油的排序方式,基本都可以用!??! 補(bǔ)充一個排序方法 打印結(jié)果 就這樣。。。

    2024年02月16日
    瀏覽(97)
  • Java Stream流 Map 分組方式匯總

    java老式的分組方式(對list for循環(huán)然后 if判斷?放入map)?代碼復(fù)雜,易讀性差,維護(hù)性差,故本文匯總了Stream流中的分組方法供大家參考,如對您有幫助,請?zhí)Ц哔F的小手點(diǎn)個贊吧,歡迎大佬留下高見 (以下方法默認(rèn)都是java8的方法,java9新增方法有標(biāo)注) 按顏色分組 打印Map結(jié)果: {紅色

    2024年02月06日
    瀏覽(26)
  • java List的stream()方法解析

    一、簡介 常用的4種stream()用法。 (1) list.stream().map().collect() 方法,可以獲取list中JavaBean的某個字段,轉(zhuǎn)成一個新的list。 (2) list.stream().filter().map().collect() 方法,可以對list中的JavaBean進(jìn)行篩選,保留符合條件的 JavaBean,然后將JavaBean中的某個字段,轉(zhuǎn)成一個新的list。 (3) list.st

    2024年01月18日
    瀏覽(27)
  • Java 8 中的 Stream API - map() 方法詳解

    摘要: Java 8 中的 Stream API 提供了一種新的處理集合和數(shù)組的方式,可以使代碼更加簡潔、易讀,同時還可以提高性能。其中 map() 方法是比較常用的方法之一,它可以將 Stream 對象中的每個元素映射為另一個元素。本文將對 Java 8 中的 Stream API 和 map() 方法進(jìn)行詳細(xì)介紹,并通

    2024年04月09日
    瀏覽(24)
  • Java中l(wèi)ist集合stream流去重

    準(zhǔn)備類: (1)根據(jù)單字段name去重 (2)根據(jù)多字段name price去重 (3)示例 輸出打印結(jié)果

    2024年02月09日
    瀏覽(81)
  • 詳細(xì)分析Java中的list.foreach()和list.stream().foreach()

    詳細(xì)分析Java中的list.foreach()和list.stream().foreach()

    典故來源于項(xiàng)目中使用了兩種方式的foreach,后面嘗試體驗(yàn)下有何區(qū)別! 先看代碼示例: 使用List的forEach : 使用Stream API的forEach : 兩者輸出結(jié)果都為如下: 既然兩個都輸出差不多的結(jié)果,但兩者還是稍微有些小區(qū)別,具體看下文! forEach() 是List接口的一部分,用于對列表中

    2024年04月25日
    瀏覽(24)
  • JAVA中對list使用stream對某個字段求和

    對于List對象 或者ListMapString,integer等類型的數(shù)組,如何快速的求出list數(shù)組中某個對象的某個屬性的和,平均數(shù),統(tǒng)計數(shù),最大值,最小值,等: 使用 XXXSummaryStatistics統(tǒng)計類實(shí)現(xiàn): 運(yùn)行結(jié)果如下: 相應(yīng)的還有DoubleSummaryStatistics, LongSummaryStatistics

    2024年02月14日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包