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

3

我有一个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}, 
  ...
]

我希望将其按第三个值分组,以获得一个Map<String,List<Map<String,Object>>>

{ object3a: [ {key1: object1a, key2: object2a}, 
              {key1: object1a, key2: object2a}
            ],
  object3b: [ {key1: object1b, key2: object2b}, 
              {key1: object1b, key2: object2b}
            ],
  ...
}

使用 Collectors.groupingBy 方法是否可能,如何实现?


在你的示例中,我并不真正清楚你是按什么对数据进行分组的。 - mkobit
起初你似乎在使用类JSON的表示法,用[...]表示列表,用{...}表示映射……但是当我看到[sample1: a, sample2 : b]时,我突然不知道你在使用什么表示法了。 - ruakh
我有一个列表 [{sample1 : a, sample2: b, sample3:c}, {sample1 : b, sample2: d, sample3:c}, ...]。我想使用Collectors.groupingby方法按sample3分组,以获取像这样的映射 { c : [{sample1: a, sample2: b}, {sample1: b, sample2 : d},..]。使用Collectors.groupingby真的可以实现吗? - Aung Satt
请提供一个清晰的代码示例。 - rogue lad
@AungSatt 我已经重新编写了你的示例,使其更易理解。请确认这是否是你想要实现的。 - Andrea Ligios
1个回答

5

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

如果这些映射是可变的,那么仍然是可能的,而且非常容易:

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

请注意,这里使用的关键字是"key3",它与当前问题的修订版本相匹配。要使其适应您的原始问题,您需要将"key3"替换为"sample3"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接