@Override
    protected void createBestHands(List<FiveCardPokerHand> allBestHands, Map<FiveCardPokerHand, List<AbstractStartingHand>> bestFiveCardHandForStartingHand, 
    FiveCardBoard simulatedBoard, List<AbstractStartingHand> filledStartingHands) {
        /* Creating all possible hands for each starting hand, and determining the best possible
         * hand each starting hand can form.
         */
        for (int i = 0; i < filledStartingHands.size(); i++) {
            PossibleHandsCreator handCreator;
            if (simulatedBoard == null || !simulatedBoard.isFull()) {
                handCreator = new PossibleHandsCreator(filledStartingHands.get(i));
            } else {
                handCreator = new PossibleHandsCreator(filledStartingHands.get(i), simulatedBoard);
            }
            List<FiveCardPokerHand> allHands = handCreator.createAllPossibleHands();
            Collections.sort(allHands, fiveCardPokerHandComparator);
            if (allHands.isEmpty()) {
                throw new RuntimeException("No hands created for starting hand " + startingHands.get(i));
            }            
            
            FiveCardPokerHand bestHand = allHands.get(0);
            allBestHands.add(bestHand);
            if (!bestFiveCardHandForStartingHand.containsKey(bestHand)) {
                bestFiveCardHandForStartingHand.put(bestHand, new ArrayList<AbstractStartingHand>());
            }
            bestFiveCardHandForStartingHand.get(bestHand).add(startingHands.get(i));
        }
    }