java - 如何使用 Java 中的对象字段将对象列表转换为映射

标签 java collections

我有以下用例:

    User Object is as followed:
    UserId      payload
    123         abc1
    123         abc2
    456         pqr1
    456         pqr2
    678         xyz1

And after iterating above list<User Object>, Result should be like: 
{123=[abc1, abc2], 456=[pqr1,pqr2], 678=[xyz1]}

这样我就可以使用 key(123) 的值(其他对象列表)进行进一步处理。 最好的方法是什么?

我在下面尝试过,但不确定如果对象大小增加,性能效率如何。

Map<String,List<String>> userMap = new HashMap<String, List<String>>();     
for(User user: users) {
  String userId = user.getUserId();
  List<String> payloads = new ArrayList<String>();
  if(userMap.containsKey(userId)) {
      payload = userMap.get(userId);
                  payloads.add(user.getPayload());
      userMap.put(userId, payloads);
  }
  else {
      payloads.add(user.getPayload());
      userMap.put(user.getUserId(), payloads);
  }
 }

最佳答案

最简单的方法是stream List 并使用 Collectors#groupingByCollectors#mapping :

Map<String, List<String>> userMap = users.stream()
    .collect(Collectors.groupingBy(User::getUserId, 
        Collectors.mapping(User::getPayload, Collectors.toList())));

输出:

{123=[abc1, abc2], 456=[pqr1, pqr2], 678=[xyz1]}

关于java - 如何使用 Java 中的对象字段将对象列表转换为映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57483694/

相关文章:

java - HTTP请求在eclipse中可以工作,但在编译的JAR包中失败

JavaScript |对象 : Get Property Ninja Move

java - 迭代优先级队列抛出 ConcurrentModificationException

java - 嵌套的 Java 集合泛型

java - 使用 JpaSpecificationExecutor 时使用 QueryHint

java - 无法使用 HTTPUNIT 获取网页上的链接数量?

Java线程: Is using interrupt() within run() acceptable to stop a thread when it is finished completing its task?

Java:如何获取字符串数组中单词的第n个字母

python - 意外的双端队列 python 行为

c# - Linq 查询以在列表 c# 的列表中过滤 id