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

Java?Stream如何將List分組成Map或LinkedHashMap

 更新時(shí)間:2023年12月15日 10:05:18   作者:shyの同學(xué)  
這篇文章主要給大家介紹了關(guān)于Java?Stream如何將List分組成Map或LinkedHashMap的相關(guān)資料,stream流是Java8的新特性,極大簡化了集合的處理操作,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在Java中,使用Stream API可以輕松地對集合進(jìn)行操作,包括將List轉(zhuǎn)換為Map或LinkedHashMap。本篇博客將演示如何利用Java Stream實(shí)現(xiàn)這兩種轉(zhuǎn)換,同時(shí)假設(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ù)的話只取第一個(gè):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ù)的話只取第一個(gè):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才行

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ù)的話只取第一個(gè):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ù)的話只取第一個(gè):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;
}

總結(jié) 

到此這篇關(guān)于Java Stream如何將List分組成Map或LinkedHashMap的文章就介紹到這了,更多相關(guān)List分組成Map或LinkedHashMap內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn)

    搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn)

    本文主要介紹了搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Java實(shí)現(xiàn)讀取Excel文件功能(EasyExcel初使用)

    Java實(shí)現(xiàn)讀取Excel文件功能(EasyExcel初使用)

    EasyExcel是一款基于Java語言的開源Excel解析工具,可以幫助我們快速、高效地讀取和寫入Excel文件,這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)讀取Excel文件功能的相關(guān)資料,使用的是EasyExcel,需要的朋友可以參考下
    2024-07-07
  • 一篇文章帶你深入了解javaIO基礎(chǔ)

    一篇文章帶你深入了解javaIO基礎(chǔ)

    這篇文章主要介紹了java 基礎(chǔ)知識之IO總結(jié)的相關(guān)資料,Java中的I/O分為兩種類型,一種是順序讀取,一種是隨機(jī)讀取,需要的朋友可以參考下,希望對你有幫助
    2021-08-08
  • Java網(wǎng)絡(luò)編程:Socket套接字、TCP和UDP協(xié)議以及Java高性能實(shí)戰(zhàn)

    Java網(wǎng)絡(luò)編程:Socket套接字、TCP和UDP協(xié)議以及Java高性能實(shí)戰(zhàn)

    本文介紹了網(wǎng)絡(luò)編程的基礎(chǔ)知識,包括Socket套接字、TCP和UDP協(xié)議的區(qū)別以及如何使用Java實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)器,通過實(shí)戰(zhàn)代碼,展示了如何從單線程到高性能線程池模型構(gòu)建網(wǎng)絡(luò)服務(wù)器,并探討了常見的網(wǎng)絡(luò)編程問題和解決方法
    2026-02-02
  • java代碼實(shí)現(xiàn)斗地主發(fā)牌功能

    java代碼實(shí)現(xiàn)斗地主發(fā)牌功能

    這篇文章主要介紹了java實(shí)現(xiàn)斗地主發(fā)牌功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 使用IDEA創(chuàng)建SpringBoot項(xiàng)目

    使用IDEA創(chuàng)建SpringBoot項(xiàng)目

    本文詳細(xì)介紹了使用SpringBoot創(chuàng)建項(xiàng)目,包含配置、啟動、開發(fā)環(huán)境配置等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 深入解析Java的Hibernate框架中的一對一關(guān)聯(lián)映射

    深入解析Java的Hibernate框架中的一對一關(guān)聯(lián)映射

    這篇文章主要介紹了Java的Hibernate框架的一對一關(guān)聯(lián)映射,包括對一對一外聯(lián)映射的講解,需要的朋友可以參考下
    2016-01-01
  • SpringBoot CommandLineRunner的異步任務(wù)機(jī)制使用

    SpringBoot CommandLineRunner的異步任務(wù)機(jī)制使用

    這篇文章主要介紹了SpringBoot CommandLineRunner的異步任務(wù)機(jī)制使用,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Eclipse2020安裝了最新版本的JDK卻無法打開的問題

    Eclipse2020安裝了最新版本的JDK卻無法打開的問題

    這篇文章主要介紹了Eclipse2020安裝了最新版本的JDK卻無法打開,提示版本太老的完美解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 詳解spring注解配置啟動過程

    詳解spring注解配置啟動過程

    這篇文章主要為大家詳細(xì)介紹了詳解spring注解配置啟動過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評論

永州市| 兖州市| 咸阳市| 夏河县| 南阳市| 安图县| 弥勒县| 沾益县| 洛浦县| 胶南市| 依兰县| 杨浦区| 依兰县| 沾益县| 峨山| 彭阳县| 秦安县| 咸宁市| 宜春市| 南阳市| 沐川县| 上高县| 启东市| 鹤壁市| 达拉特旗| 梁河县| 杨浦区| 武清区| 茌平县| 沐川县| 邹城市| 安徽省| 宁安市| 梁山县| 交城县| 建阳市| 齐河县| 天津市| 泰州市| 南投县| 凤山市|