我正在尝试使用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
的出现次数?
答案 0 :(得分:6)
Lambda表达式可以帮助分离不同的逻辑位,然后将它们组合在一起。
正如我从您的代码中了解到的那样,您正在测试玩家是否至少包含threshold
个matches
元素。我们可以编写测试逻辑如下:
Predicate<Player> illegalTest = player -> matches.stream()
.filter(m -> m.contains(player))
.count() >= threshold;
然后我们想要应用此测试来查看是否有任何玩家匹配:
boolean hasIllegal = match.stream().anyMatch(illegalTest);
最后:
if (hasIllegal) {
throw new IllegalArgumentException("...");
}