Как сравнить результаты из нескольких потоков и получить максимальный результат - PullRequest
1 голос
/ 03 июля 2019

Я пишу Pokergame на Java, и у меня возникают проблемы с написанием оценки рук. Я думал о написании функции, которая возвращает количество карт одной масти, чтобы сначала проверить наличие сброса. У меня есть карточка класса с перечислением SUITS и getSuit для получения. В моем Evaluator я хочу метод countSuits(), который возвращает значение int с наибольшим количеством совпадающих мастей в руке. Я мог бы проверить каждый костюм отдельно, как это:

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

, а затем сравните возвращаемые значения и верните самое высокое, но я хотел бы найти решение, чтобы сделать это с одним потоком.

Это вообще возможно? Я все еще немного пытаюсь понять потоки ...

1 Ответ

1 голос
/ 03 июля 2019

Вы можете использовать groupingBy для группировки по мастям, а затем с помощью counting в качестве нижестоящего потока найти количество карт для каждой масти в вашем списке:

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

См. Документ Java для groupingBy() и counting()

Чтобы убедиться, что в руке 5 мастей, вы можете проверить:

if (collect.values().contains(5L)) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...