如何比较多个流的结果并返回最高结果

时间:2019-07-03 16:10:04

标签: java java-stream

我正在用Java编写扑克游戏,在编写手牌评估时遇到了麻烦。我正在考虑编写一个函数,该函数返回具有相同花色的卡数以首先检查冲洗。 我有一个带有枚举SUITS和getter getSuit的类卡。 在我的评估器中,我想要一个方法countSuits(),该方法返回一个int值,该值具有最大的匹配套数。 我可以这样分别检查每个西装:

Arrays.stream(cards).filter(card -> card.getSuit()== Card.Suit.DIAMOND).count(); 

然后比较返回值并返回最高值,但我想找到一种解决方案,以一种方式执行此操作。

这甚至可能吗?我仍然有点难以理解流...

1 个答案:

答案 0 :(得分:1)

您可以使用groupingBy对西服进行分组,然后使用counting作为下游在列表中查找每种西服的牌数:

 Map<Suit, Long> collect = cards.stream()
            .collect(Collectors.groupingBy(Card::getSuit, Collectors.counting()));

有关groupingBy()counting()的信息,请参见Java文档

要确保手中是否有5套西服,您可以检查:

if (collect.values().contains(5L)) {...}