import java.util.*; import java.util.stream.Collectors; class Poker { private final List bestHands; Poker(final List hands) { bestHands = bestHands(hands); } List getBestHands() { return bestHands; } private List bestHands(final List hands) { ArrayList scoredHands = new ArrayList<>(); for (String s : hands) { scoredHands.add(new Hand(s)); } Optional maxScoreIfAny = scoredHands .stream() .map(Hand::getScore) .max(Comparator.naturalOrder()); return maxScoreIfAny .map(maxScore -> scoredHands .stream() .filter(h -> h.getScore() == maxScore) .map(Hand::getInput) .collect(Collectors.toList())) .orElseGet(Collections::emptyList); } }