2015-06-10 83 views
13

我想借此List<Pojo>return一個Map<String, List<Pojo>>其中Map的關鍵是在Pojo一個String值,姑且稱之爲String key的Java 8個Lambda表達式組列表進入地圖

爲了澄清,給出以下:

POJO的1:密鑰:一個值:1

POJO的2:密鑰:一個值:2

POJO的3:項:B值:3

POJO的4:項:b值:4

我想要一個與Map<String, List<Pojo>>尺寸keySet() 2,其中鍵 「a」 具有的POJO 1和2,和鍵 「b」 具有的POJO 3和4

我怎樣才能最好地實現這個使用Java 8 lambda?

+0

這是什麼問題? – Eran

+0

@Eran我已經更新了這個問題。 –

+2

'映射(Function.identity(),toList())'有什麼意義? 'identity()'意味着「沒有映射」,那麼爲什麼還要用映射收集器呢?只需將它替換爲單獨的'toList()',並最終得到'groupingBy(t - > t.getKey(),HashMap :: new,toList())'',它幾乎可以描述'groupingBy'的默認值,當使用默認值時,結果不保證是「HashMap」。所以當默認值是合適的(即你不需要'HashMap')時,使用默認值,如[Eran's answer](http://stackoverflow.com/a/30756040/2711488) – Holger

回答

38

看來,簡單groupingBy變化是你所需要的:

Map<String, List<Pojo>> map = pojos.stream().collect(Collectors.groupingBy(Pojo::getKey)); 
6

另外,如果你想返回一個類似的地圖,而是整體的POJO你想要的地圖的值是POJO中的某些屬性,你會這樣做:

Map<String, List<String>> map = pojos.stream() 
      .collect(
        Collectors.groupingBy(
          Employee::getKey, Collectors.mapping(
            Pojo::getSomeStringProperty, Collectors.toList())));