Java Stream:List分组成Map或LinkedHashMap

这篇具有很好参考价值的文章主要介绍了Java Stream:List分组成Map或LinkedHashMap。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Java中,使用Stream API可以轻松地对集合进行操作,包括将List转换为Map或LinkedHashMap。本篇博客将演示如何利用Java Stream实现这两种转换,同时假设List中的元素是User对象。


1. 数据准备

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转Map(无序-默认)

List转Map有两种Map格式,分别是 Map<String, User>Map<String, List>,下面我将分别展示:

2.1 List转Map<String, User>

转换成Map<String, User>我们需要使用到Collectors.toMap方法:

//通过名字进行分组,如果名字重复的话只取第一个:List转Map<String, User>
Map<String, User> map01 = list.stream().collect(Collectors.toMap(User::getName, Function.identity(), (u1, u2) -> u1));
System.out.println(map01);

执行结果:

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

2.2 List转Map<String, List<User>>

转换成Map<String, List<User>>我们需要使用到Collectors.groupingBy方法:

//通过名字进行分组,如果名字重复的话就分组成List:List转Map<String, List<User>>
Map<String, List<User>> map02 = list.stream().collect(Collectors.groupingBy(User::getName));
System.out.println(map02);

执行结果:

{
李四=[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中打印出来的执行结果并没有按照List中添加的顺序打印的

3. List转LinkedHashMap(有序)

List转LinkedHashMap也有两种Map格式,分别是 LinkedHashMap<String, User>LinkedHashMap<String, List>,下面我将分别展示:

3.1 List转LinkedHashMap<String, User>

转换成LinkedHashMap<String, User>我们需要使用到Collectors.toMap方法:

//通过名字进行分组,如果名字重复的话只取第一个:List转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);

执行结果:

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

3.2 List转LinkedHashMap<String, List<User>>

转换成LinkedHashMap<String, List<User>>我们需要使用到Collectors.groupingBy方法:

//通过名字进行分组,如果名字重复的话就分组成List:List转LinkedHashMap<String, List<User>>
Map<String, List<User>> map04 = list.stream().collect(Collectors.groupingBy(User::getName, LinkedHashMap::new, Collectors.toList()));
System.out.println(map04);

执行结果:

{
张三=[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中打印出来的执行结果是按照List中添加的顺序打印的

4. 总结

在List转Map的过程中:
如果我们对Map中的顺序没要求,我们可以通过stream流将List转换为默认的HMap即可
如果我们对Map中的顺序有要求,我们可以通过stream流将List转换为LinkedHashMap才行文章来源地址https://www.toymoban.com/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"));
    //通过名字进行分组,如果名字重复的话只取第一个:List转Map<String, User>
    Map<String, User> map01 = list.stream().collect(Collectors.toMap(User::getName, Function.identity(), (u1, u2) -> u1));
    System.out.println(map01);
    //通过名字进行分组,如果名字重复的话就分组成List:List转Map<String, List<User>>
    Map<String, List<User>> map02 = list.stream().collect(Collectors.groupingBy(User::getName));
    System.out.println(map02);
    //通过名字进行分组,如果名字重复的话只取第一个:List转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);
    //通过名字进行分组,如果名字重复的话就分组成List:List转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;
}

到了这里,关于Java Stream:List分组成Map或LinkedHashMap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    Java8使用 stream流 给ListMapString,Object根据字段key 分组 一、项目场景: 从已得到的List集合中,根据某一元素(这里指map的key)进行分组,筛选出需要的数据。 如果是SQL的话则使用 group by 直接实现,代码的方式则如下: 使用到stream流的 Collectors.groupingBy() 方法。 二、代码实现 1、首

    2024年02月02日
    浏览(40)
  • 使用java8 新特性stream流对List<Map<String, Object>>集合进行遍历、过滤、查询、去重、排序、分组

    对于一个ListMapString, Object类型的数据,可以使用Java 8的新特性stream流来进行遍历、过滤、查询、去重、排序、分组等操作。 遍历: 过滤: 查询: 去重: 排序: 分组:

    2024年02月10日
    浏览(47)
  • 如何使用Stream流将List转换为Map

    以下程序用到的基础代码:

    2024年02月04日
    浏览(35)
  • 使用stream流对List<Map<String, Object>>集合根据value进行排序

    第一步:初始化数据 ========================================================= 第二步:开始排序 ① 根据数字排序 打印结果 ② 根据字符串排序 打印结果 ③ 根据时间类型排序 打印结果 总结:String类型是万金油的排序方式,基本都可以用!!! 补充一个排序方法 打印结果 就这样。。。

    2024年02月16日
    浏览(33)
  • Java Stream流 Map 分组方式汇总

    java老式的分组方式(对list for循环然后 if判断 放入map) 代码复杂,易读性差,维护性差,故本文汇总了Stream流中的分组方法供大家参考,如对您有帮助,请抬抬高贵的小手点个赞吧,欢迎大佬留下高见 (以下方法默认都是java8的方法,java9新增方法有标注) 按颜色分组 打印Map结果: {红色

    2024年02月06日
    浏览(30)
  • java List的stream()方法解析

    一、简介 常用的4种stream()用法。 (1) list.stream().map().collect() 方法,可以获取list中JavaBean的某个字段,转成一个新的list。 (2) list.stream().filter().map().collect() 方法,可以对list中的JavaBean进行筛选,保留符合条件的 JavaBean,然后将JavaBean中的某个字段,转成一个新的list。 (3) list.st

    2024年01月18日
    浏览(32)
  • Java 8 中的 Stream API - map() 方法详解

    摘要: Java 8 中的 Stream API 提供了一种新的处理集合和数组的方式,可以使代码更加简洁、易读,同时还可以提高性能。其中 map() 方法是比较常用的方法之一,它可以将 Stream 对象中的每个元素映射为另一个元素。本文将对 Java 8 中的 Stream API 和 map() 方法进行详细介绍,并通

    2024年04月09日
    浏览(43)
  • Java中list集合stream流去重

    准备类: (1)根据单字段name去重 (2)根据多字段name price去重 (3)示例 输出打印结果

    2024年02月09日
    浏览(35)
  • 详细分析Java中的list.foreach()和list.stream().foreach()

    典故来源于项目中使用了两种方式的foreach,后面尝试体验下有何区别! 先看代码示例: 使用List的forEach : 使用Stream API的forEach : 两者输出结果都为如下: 既然两个都输出差不多的结果,但两者还是稍微有些小区别,具体看下文! forEach() 是List接口的一部分,用于对列表中

    2024年04月25日
    浏览(31)
  • JAVA中对list使用stream对某个字段求和

    对于List对象 或者ListMapString,integer等类型的数组,如何快速的求出list数组中某个对象的某个属性的和,平均数,统计数,最大值,最小值,等: 使用 XXXSummaryStatistics统计类实现: 运行结果如下: 相应的还有DoubleSummaryStatistics, LongSummaryStatistics

    2024年02月14日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包