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

标签 java java-stream

我正在用 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/

相关文章:

java - 使用 SOAPUI 工具完成的 Web 服务测试是否可以完全在 Java 中完成?

java - 使用列表反序列化 JSON 包装对象会返回 null 属性

java - java中通过正则表达式进行电子邮件验证

java - Fragment 在启动时不执行 AsyncTask

java - BufferedReader 出现意外的 java.util.NoSuchElementException

java - TreeSet 与 Java 8 Streams 性能对比

java - 在 Stream 中使用 AtomicInteger 进行索引是一种合法的方式吗?

java - 如何在 FlowLayout 或 GridLayout 中手动放置组件?

java - 为什么mapToInt不能与collect(toList())一起使用?

java - 为什么使用 for 循环的倒数总和比流快 400 倍?