如何分组名单<地图<字符串,对象>>地图<字符串,列表<地图<字符串,对象>>在Java8

问题描述:

我有一个List<Map<String,Object>>如何分组名单<地图<字符串,对象>>地图<字符串,列表<地图<字符串,对象>>在Java8

[ {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?方法,以及如何?

+0

在我的例子中,我不清楚你在分组数据。 – mkobit 2015-03-03 02:30:53

+0

起初,您似乎正在使用类似JSON的表示法,列表由'[...]'表示,而地图由{{}}表示。 。 。但后来我得到'[sample1:a,sample2:b]',我突然不知道你使用的是什么符号。 – ruakh 2015-03-03 02:39:06

+0

我有一个清单[{sample1:a,sample2:b,sample3:c},{sample1:b,sample2:d,sample3:c},...]。我想通过使用Collectors.groupingby方法按照sample3:key c进行分组,以获得像这样的映射{c:[{sample1:a,sample2:b},{sample1:b,sample2:d},..] 。真的可以通过使用Collectors.groupingby? – 2015-03-03 03:45:00

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

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

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

请注意,我这里用钥匙"key3"该问题的当前版本匹配。为了适应您的原始问题,您必须将"key3"替换为"sample3"

+0

该死的,我想在工作中使用Java 8 ... +1 – 2015-03-03 14:26:44

+0

你的答案解决了我的问题。 – 2015-03-04 11:11:13