Java 8流分组通过自定义功能进行缩减

时间:2016-04-20 15:12:33

标签: java-8 java-stream

我从某个数据源

中检索了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; }。

0 个答案:

没有答案