public PokerHandValue GetHandRank(Hand hand) {
        String thisHand = hand.toString();
        if(IsRoyalFlush(thisHand)) return new PokerHandValue("", PokerHandRank.Royal_Flush);
        if(!IsStraightFlush(thisHand).equals("")) return new PokerHandValue(IsStraight(thisHand), PokerHandRank.Straight_Flush);
        if(!FourOfAKind(thisHand).equals("")) return new PokerHandValue(FourOfAKind(thisHand), PokerHandRank.Four_Of_A_Kind);
        if(!FullHouse(thisHand).equals("")) return new PokerHandValue(FullHouse(thisHand),  PokerHandRank.Full_House);
        if(!IsFlush(thisHand).equals("")) return new PokerHandValue(IsFlush(thisHand), PokerHandRank.Flush);
        if(!IsStraight(thisHand).equals(""))return new PokerHandValue(IsStraight(thisHand), PokerHandRank.Straight);
        if(!ThreeOfAKind(thisHand).equals("")) return new PokerHandValue(ThreeOfAKind(thisHand), PokerHandRank.Three_Of_A_Kind);
        if(!TwoPair(thisHand).equals("")) return new PokerHandValue(TwoPair(thisHand), PokerHandRank.Two_Pair);
        if(!OnePair(thisHand).equals("")) return new PokerHandValue(OnePair(thisHand), PokerHandRank.One_Pair);
        return new PokerHandValue(hand.GetHighestSingleCardInHand(), PokerHandRank.High_Card);
    }