如何在 Java8 中将 List<Map<String,Object>> 分组为 Map<String,List<Map<String,Object>>

Aun*_*att 3 java java-8 java-stream collectors

我有一个 List<Map<String,Object>>

[ {key1: object1a, key2: object2a, key3: object3a}, 
  {key1: object1a, key2: object2a, key3: object3a}, 
  {key1: object1b, key2: object2b, key3: object3b}, 
  {key1: object1b, key2: object2b, key3: object3b}, 
  ...
]
Run Code Online (Sandbox Code Playgroud)

我想按第三个值对其进行分组,以获得一个Map<String,List<Map<String,Object>>>

{ object3a: [ {key1: object1a, key2: object2a}, 
              {key1: object1a, key2: object2a}
            ],
  object3b: [ {key1: object1b, key2: object2b}, 
              {key1: object1b, key2: object2b}
            ],
  ...
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用该Collectors.groupingBy?方法,以及如何使用?

Hol*_*ger 5

该请求不是纯粹的分组操作,因为您希望通过删除分组值来修改元素。

如果地图是可变的,它仍然是可能的并且很容易:

List<Map<String,String>> list= …
Map<String,List<Map<String,String>>> map=
  list.stream().collect(Collectors.groupingBy(m->m.remove("key3")));
Run Code Online (Sandbox Code Playgroud)

请注意,我在"key3"此处使用与问题当前修订版匹配的密钥。要使其适应您的原始问题,您必须替换"key3""sample3".