我有一个对象列表,格式如下:
public class Child
{
private Mom mom;
private Dad dad;
private String name;
private int age;
private boolean isAdopted;
}
我需要将这个列表转换成另一种数据结构的列表,将具有相同Mom和Dad键的对象聚合到一起,形成如下所示的形式。
public class Family
{
private Mom mom;
private Dad dad;
private Map<String, int> kids;
}
'kids' map是一个将所有孩子的名字映射到年龄的映射表。
public Collection<Family> transform( final Collection<Child> children )
{
return children.stream()
.filter( child -> !child.getIsAdopted() )
.collect( ImmutableTable.toImmutableTable( child -> child.getMom(),
child -> child.getDad(),
child -> new HashMap<>(child.getName(), child.getAge() ),
(c1, c2) -> {
c1.getKids().putAll(c2.getKids());
return c1;
} ) )
.cellSet()
.stream()
.map( Table.Cell::getValue)
.collect( Collectors.toList() );
}
有没有一种方法可以在转换为最终列表之前,无需收集到中间表中就完成这项任务?