首页 > 解决方案 > 如何比较来自多个流的结果并返回最高结果

问题描述

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

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

然后比较返回值并返回最高值,但我想找到一个解决方案来用一个流来做到这一点。

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

标签: javajava-stream

解决方案


您可以使用groupingBy按花色分组,然后counting用作下游查找列表中每个花色的牌数:

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

请参阅 java 文档了解groupingBy()counting()

要确定手中是否有 5 种花色,您可以检查:

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

推荐阅读