我正在用 Java 编写扑克游戏,但在编写手牌评估时遇到了麻烦。我正在考虑编写一个函数,返回具有相同花色的牌的数量,以首先检查同花。
我有一个带有枚举 SUITS 和 getter getSuit 的类 Card。
在我的评估器中,我想要一个方法 countSuits()
,它返回一个 int 值,其中包含手中匹配花色的最高数量。
我可以像这样单独检查每个套装:
Arrays.stream(cards).filter(card -> card.getSuit()== Card.Suit.DIAMOND).count();
然后比较返回值并返回最高的值,但我想找到一种解决方案来使用一个流来执行此操作。
这可能吗?我仍然有点难以理解流......
最佳答案
您可以使用 groupingBy
按花色进行分组,然后使用 counting
作为下游查找列表中每种花色的牌数:
Map<Suit, Long> collect = cards.stream()
.collect(Collectors.groupingBy(Card::getSuit, Collectors.counting()));
请参阅 java 文档 groupingBy()
和 counting()
要确定手中是否有 5 个花色,您可以检查:
if (collect.values().contains(5L)) {...}
关于java - 如何比较多个流的结果并返回最高结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56874240/