Java:将对象列表转换为另一个 HashMap 中的 HashMap

标签 java java-stream

我有一个要转换为散列映射的对象列表。是否可以创建这种类型的 HashMap Map<String, Map<String, List<Object>>

这样做的原因是我需要根据对象中的某些属性对它们进行排序,以便以后可以遍历它。所以下面是对象当前的样子的 Json:

[
  object1: {plan: "11", relationship: "A", etc...},
  object2: {plan: "12", relationship: "A", etc...},
  object3: {plan: "11", relationship: "B", etc...},
]

我正在尝试使用 Collectors把它变成HashMap但我对第二个 HashMap 感到困惑,我似乎无法将关系列表放入 Map .

Map<String, Map<String, List<myObject>> myHash = objectList
    .stream()
    .collect(Collectors.toMap(myObject::plan, 
        a -> a.stream().collect(Collectors.groupingBy(myObject::relationship))));

我想得到的是这样的

[
  {
    key: "11", 
    value: [
             {key: "A", value: [ object1 ]},
             {key: "B", value: [ object3 ]}
           ]
  },
  {
    key: "12",
    value: [{key: "A", value: [ object2 ]}]
  }
]

最佳答案

您可以分组两次,“关系”分组收集器是“计划”分组收集器的下游:

Map<String, Map<String, List<myObject>> myHash = objectList
    .stream()
    .collect(Collectors.groupingBy(myObject::getPlan, 
                Collectors.groupingBy(myObject::getRelationship)));

这将使每个“计划”组下的“关系”组。

关于Java:将对象列表转换为另一个 HashMap 中的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61264871/

相关文章:

java - 联系电话验证

java - 如何处理 lambda 中的已检查异常?

java - 如何通过 Stream API 对元素值变化的元素进行正确排序

Java map/collect 用于流对列表列表求和

Java - 添加与异常冲突的方法

java - 在 android studio 中,当手机没有互联网时,如何防止缓冲读取器从 url 读取时出现错误

java - 如何在 JavaFX 中使用 FXML 创建自定义对话框?

java - 无法处理weblogic中数据源的泄漏连接数

java - SortedSet.stream() 上的 findFirst()

java 8并行流,阻塞代码可能吗?