Java 8流:计数值

时间:2016-05-02 19:30:04

标签: java lambda java-8 java-stream

我正在尝试使用Java 8流来获取列表中值集合中对象的发生次数,但我还不知道如何。

这就是我想要做的事情:

hello.getBytes("ISO-8859-1")

我知道我可以与int threshold = 5; for (Player player : match) { // match is a Set<Player> int count = 0; for (Set<Player> existingMatch : matches) if (existingMatch.contains(player)) count++; if (count >= threshold ) throw new IllegalArgumentException("..."); } collect进行分组,并使用过滤器说明要应用的操作是groupingBy和新的方法引用运算符。但是我对这些新的Java 8功能仍然太过绿色,并且无法将它们放在一起。

那么我怎样才能使用Stream来提取列表中所有值集合中contains的出现次数?

1 个答案:

答案 0 :(得分:6)

Lambda表达式可以帮助分离不同的逻辑位,然后将它们组合在一起。

正如我从您的代码中了解到的那样,您正在测试玩家是否至少包含thresholdmatches元素。我们可以编写测试逻辑如下:

Predicate<Player> illegalTest = player -> matches.stream()
        .filter(m -> m.contains(player))
        .count() >= threshold;

然后我们想要应用此测试来查看是否有任何玩家匹配:

boolean hasIllegal = match.stream().anyMatch(illegalTest);

最后:

if (hasIllegal) {
    throw new IllegalArgumentException("...");
}