• Java中将List转换为Map


    Java 8中,Stream API和Collectors类提供了一种方便的方式来处理集合数据。其中,将List转换为Map是一个常见的操作。下面我们将介绍如何使用Stream API和Collectors类将List转换为Map。

    首先,假设我们有一个User类,包含id和name两个属性:

    1. public class User {
    2. private int id;
    3. private String name;
    4. // 省略getter和setter方法
    5. }

    接下来,我们创建了一个User对象的List:

    1. List userList = new ArrayList<>();
    2. userList.add(new User(1, "Alice"));
    3. userList.add(new User(2, "Bob"));
    4. userList.add(new User(3, "Charlie"));

    现在,我们想要将这个List转换为一个Map,其中键是User对象的id,值是User对象本身。可以使用Stream API和Collectors类中的toMap()方法来实现:

    1. Map userMap = userList.stream()
    2. .collect(Collectors.toMap(User::getId, Function.identity()));

    在上述代码中,我们使用Collectors.toMap()方法将List转换为Map。第一个参数是用于指定Map中键的属性或方法,这里我们使用User::getId指定了User对象的id属性作为键。第二个参数是用于指定Map中值的属性或方法,这里我们使用Function.identity()指定了User对象本身作为值。

    如果User对象的属性不是唯一的,或者需要将List转换为Map,则可以在toMap()方法中使用Collectors.toMap()的重载方法,并提供一个合并函数来解决冲突。例如:

    1. List userList = new ArrayList<>();
    2. userList.add(new User(1, "Alice"));
    3. userList.add(new User(2, "Bob"));
    4. userList.add(new User(3, "Charlie"));
    5. Map userMap = userList.stream()
    6. .collect(Collectors.toMap(User::getName, Function.identity(), (u1, u2) -> u1));

    在这个例子中,我们使用User::getName指定了User对象的name属性作为键。由于name属性不是唯一的,我们提供了一个合并函数`(u1, u2) -> u1`,表示当出现重复的键时,使用第一个出现的值。

    使用Stream API和Collectors类将List转换为Map的好处是代码简洁、易于理解和维护。相比于传统的循环遍历方式,使用Stream API和Collectors类可以大大减少代码量,并且可以利用多核CPU的优势,提高代码的执行效率。

    除了将List转换为Map,Stream API和Collectors类还提供了许多其他的操作,例如对集合进行筛选、排序、分组、统计等。

  • 相关阅读:
    【翻译】Controlling Perceptual Factors in Neural Style Transfer
    Cilium系列-14-Cilium NetworkPolicy 简介
    【黄啊码】什么是php-fpm?
    文心一言 VS 讯飞星火 VS chatgpt (96)-- 算法导论9.3 1题
    您遇到过网页抓取时被封IP的情况吗?
    代码随想录算法训练营第三十一天丨 贪心算法part02
    Docker部署ElasticSearch数据库+analysis-ik分词器插件
    复制活动工作表和计数未保存工作簿进行
    天玑科技PBData信创数据库私有云平台荣获“专题展优秀成果奖”
    想自学软件测试,应该从哪开始?
  • 原文地址:https://blog.csdn.net/JonTang/article/details/134273074