我正在用Java编写扑克游戏,在编写手牌评估时遇到了麻烦。我正在考虑编写一个函数,该函数返回具有相同花色的卡数以首先检查冲洗。
我有一个带有枚举SUITS和getter getSuit的类卡。
在我的评估器中,我想要一个方法countSuits()
,该方法返回一个int值,该值具有最大的匹配套数。
我可以这样分别检查每个西装:
Arrays.stream(cards).filter(card -> card.getSuit()== Card.Suit.DIAMOND).count();
然后比较返回值并返回最高值,但我想找到一种解决方案,以一种方式执行此操作。
这甚至可能吗?我仍然有点难以理解流...
答案 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)) {...}