2016-10-07 118 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())));