订购对象列表

Rya*_*les 0 java enums list

我正在制作一个模拟纸牌游戏的程序.我有一个Card代表扑克牌的课程:

//suit types
public enum Suits{
    SPADES,
    CLUBS,
    HEARTS,
    DIAMONDS
}

//value types
public enum Values{
    TWO,
    THREE,
    FOUR,
    FIVE,
    SIX,
    SEVEN,
    EIGHT,
    NINE,
    TEN,
    JACK,
    QUEEN,
    KING,
    ACE, 
}

private Suits suit;
private Values value;

//Card constructor
public Card(Values value, Suits suit){
    this.value = value;
    this.suit = suit;
}
Run Code Online (Sandbox Code Playgroud)

在我的游戏课中,我有一个由以下List人员代表的玩家手Cards:

public List<Card> playerHand = new ArrayList<Card>();
Run Code Online (Sandbox Code Playgroud)

有没有办法可以通过我的枚举对玩家进行排序Values?意味着如果球员的手是:

十,ACE,两个,五个

订购后会是:

两个,五个,十个,ACE

我的条件Ace总是很高,Suit并不重要.我知道订购列表是微不足道的我只是不知道如何做一个Object基于enum

Tho*_*mas 6

枚举有默认排序,即它们实现Comparable,因此您只需对枚举列表进行排序或调用ACE.compareTo( TEN )一些枚举Comparator.需要注意的是枚举值的顺序是在枚举类定义的顺序(基于序,见下段),即你的情况TWO< THREE< FOUR等.

另外,枚举具有序数,即定义内的枚举值的索引.在你的情况下TWO会有序数0,THREE序数1等.

为了对你的卡进行排序,你可以使用这样的Comparator(或工具Comparable<Card>):

class CardComparator implements Comparator<Card> {
  public int compare( Card lhs, Card rhs) {
    //suit would be relevant otherwise you'd end up with spades 10, hearts 10, spades jack etc.
    //thus sort by suit first to keep the cards of a suit together
    int r = lhs.suit.compareTo( rhs.suit ); 

    if( r == 0) { //same suit    
      r = lhs.value.compareTo( rhs.value );
    }
    return r;
  } 
}
Run Code Online (Sandbox Code Playgroud)