2016-09-25 41 views
1

如果我有Map<User, List<Foo>> MAP1一個映射,其中富看上去象下面這樣:由展平操作轉換一個HashMap的另一個

Foo 
User 
id 
name 
age 

和ID在所有FOOS獨特的,我正在尋找一種方式來轉換Map>到Map<Integer, Foo>的地圖,其中密鑰是foo ID。我曾嘗試以下,但只能得到的Map<Integer, List<Foo>>映射:

Map<Integer, List<Foo>> idToListOfFoo = originalMap.values().stream() 
      .flatMap(List::stream) 
      .collect(Collectors.groupingBy(Foo::getId)); 

我怎樣纔能有效地實現這一目標?

回答

4

這裏有一個收藏家。它被稱爲toMap。您可以使用這樣的:

Map<Integer, Foo> idToListOfFoo = originalMap.values().stream() 
     .flatMap(List::stream) 
     .collect(Collectors.toMap(Foo::getId, Function.identity())); 

toMap需要2個功能parameteres:首先是用來獲取從元件和第二的關鍵在於獲取地圖中的價值。

Function.identity()返回一個剛剛返回其輸入的函數。因此,關鍵是id,值是結果圖中的對象本身。

相關問題