2016-10-07 84 views
0

可以說我有對象的列表看起來像這樣:使用GROUPBY到轉換列表映射

Foo 
int id 
Owner owner 
int targetId 

我想這個列表轉化成Map<Owner, Set<Integer>> ownerToTargetIds映射將必須對每個關鍵在Foo對象列表中找到唯一所有者,併爲該所有者的每個foo對象中的所有targetIds賦值。例如:

Foo a {1, 2, 3} 
Foo b {2, 2, 4} 
Foo c {3, 2, 5} 

在上面,你會transoform這個名單與主要= 2,值{3,4,5}映射=設置。

我試圖使用流分組功能去的地步,我可以從所有者獲得映射到整個記錄,但,這並不真正的工作:

Map<Owner, List<Foo>> userToTargetIds = foo.get().stream() 
        .collect(toMap(Foo::getTargetId)); 
+4

的Collectors.groupingBy API文檔有一個例子做的正是你問:http://docs.oracle.com/javase/8/docs/api/的java/util的/流/ Collecto rs.html#groupingBy-java.util.function.Function-java.util.stream.Collector- –

回答

1

正如JB Nizet說:RTM

但這裏的剪斷:

Map<Owner, Set<Integer>> userToTargetIds 
     = fooList.stream().collect(groupingBy(Foo::getOwner, 
               mapping(Foo::getTargetId, toSet())));