Java:将对象列表转换为另一个hashmap中的hashmap
我有一个要转换为哈希映射的对象列表。是否可以创建此类型的哈希映射Java:将对象列表转换为另一个hashmap中的hashmap,java,java-stream,Java,Java Stream,我有一个要转换为哈希映射的对象列表。是否可以创建此类型的哈希映射map您可以分组两次,其中“关系”分组收集器位于“计划”分组收集器的下游: Map<String, Map<String, List<myObject>> myHash = objectList .stream() .collect(Collectors.groupingBy(myObject::getPlan, Collectors.groupingB
map您可以分组两次,其中“关系”分组收集器位于“计划”分组收集器的下游:
Map<String, Map<String, List<myObject>> myHash = objectList
.stream()
.collect(Collectors.groupingBy(myObject::getPlan,
Collectors.groupingBy(myObject::getRelationship)));
map只是一个提示:Java是一种面向对象的语言,因此我建议您尽量避免使用容器中的容器,并创建自己的对象来表示您想要的内容。这将导致代码更易于阅读和理解,因为您的对象将有一个名称。@如果只是在只返回布尔值的函数中一次性使用,则仍然是这种情况吗?唯一需要做的就是通过一些for循环来检查无效性。该对象将只使用一次。为什么不使用两个不同的HashMap,使用两个不同的键呢。然后,您可以检查所有对象,这些对象在一个HashMap中的键为“12”,在第二个HashMap中的键为“a”。@NomadMaker只是因为我需要相互比较对象的子集,所以所有具有相同计划和关系的对象都将被比较。这样,它只是一个嵌套的for循环,我不必一直对照列表检查是否有正确的对象。@BStill:我个人是独立于对象的使用频率来做这件事的。我的目标是让其他开发人员(他们不知道我的想法)容易理解代码。实现这一点的最简单方法(源代码中没有大量注释)是给“things”指定有意义的名称(有时这很难)。如果要限制对象,可以为此使用静态嵌套类。所以其他开发人员会立即知道这个类/对象只有一个用途。但我认为我们使用的是一种面向对象的语言,具有很强的典型性。让我们用这个:-)
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)));