java - 如何比较来自多个流的结果并返回最高结果
问题描述
我正在用 Java 编写扑克游戏,但在编写手牌评估时遇到了麻烦。我正在考虑编写一个函数,该函数返回具有相同花色的牌的数量,以首先检查同花。我有一个带有枚举 SUITS 和 getter getSuit 的类卡。在我的 Evaluator 中,我想要一种方法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)) {...}
推荐阅读
- c - 如何从输出中删除多余的零?
- react-native - React Native VirtualizedLists 不应该嵌套在具有相同方向的普通 ScrollViews 中
- ansible - 您将如何检查 ansible URI 模块正在创建的 url?
- postgresql - 在同一数据库中使用 Prisma ORM 的多个服务的最佳实践?
- excel - 如何在 VBA 中为不同工作表中的不同单元格创建数据验证菜单
- r - 在 r 中执行变量的成对交互
- mysql - 在 SQL 中同时从多列和多行计数
- botframework - 有没有办法从 MS 消息扩展中的代码动态更改清单中的“命令”
- r - 数据转换:将分类数据框传播到计数 R
- python - Tkinter:按下按钮时读取并存储文本