我从某个数据源
中检索了List<Item>
@Data
public class Item {
private String name;
private String owner;
private boolean enabled;
...
}
内容如下:
name owner enabled
==== ===== =======
foo boss true
foo under-boss false
bar kinda-boss true
buzz boss false
buzz dude true
我的目标是为每个name
获取一行,其中包含最重要owner
的整个项目。所以:
name owner enabled
==== ===== =======
foo boss true
bar kinda-boss true
buzz boss false
我试过了:
listItem.stream().collect(Collectors.groupingBy(Item::getName))
给我一个很好的名字地图 - &gt;包含具有该名称的各种项目的列表。
但我的问题是在那里处理List以返回最专家所有者的完整项目。该文档解释了groupingBy(Item::getName, Collectors.reducing(false, Item::isEnabled, Boolean::max)
如何为每个名称返回一个布尔最大值,但我正在查找整个项目,而不是所有者名称的平均长度等。
最重要的所有者是由一种方法决定的(它实际上是基于几个领域)。我可以写一个(a,b) - &gt; {if(....)返回a返回b; }。