2015-03-03 145 views
1

我有一個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

回答

3

該請求不是純粹的分組操作,因爲您希望通過刪除分組值來修改元素。

如果地圖是可變的,它仍然是可能的,並且很容易:

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

相關問題