ArrayList中的Java Strings对象



在我的MainActivity中,我有以下几行代码:

    //data.getFirstUserInput()-1 is equal to user input.
     deck.setCardNumberEmpty(data.getFirstUserInput()-1);
       System.out.println("n Cards on table");
                 ArrayList<Deck> deck= deck.getCards();
                  Collections.sort(cards);
                  for (Deckc: deck
           System.out.print((format("%10s","33[F[ " + c.getOneSpecificNumber())+ " ]"));}

这会打印出我的随机卡号。但问题是,它们不是数字排序的,

知道我能做什么吗?

卡类别

public class Card {
    private String cardLetter;
    private String cardNumber;
    private String nullValue;
    public Card(String cardLetter, String cardNumber, String nullValue){
        this.cardLetter = cardLetter;
        this.cardNumber = cardNumber;
        this.nullValue = nullValue;
    }
  public String getOneSpecificNumber() { return cardNumber;}
  public void setCardNumber(String x){  cardNumber = x;  }

private ArrayList<Deck> deck = new ArrayList();
public Deck(){
                   char A  = 'A';
    int repeats = 2, numOfCards = 8;
    for ( int i = 0; i<numOfCards;i++){
        for (int j = 0; j<repeats; j++){
            cards.add(new Card((char) ( A + i ) + "",i+1,""));
        }
    }
}

为了根据cardNumbercards数组进行排序,Card类必须实现Comparable并覆盖compareTo()

以下是代码片段:

public class Card implements Comparable<Card> {
    private String cardLetter;
    private String cardNumber;
    private String nullValue;
    public Card(String cardLetter, String cardNumber, String nullValue){
        this.cardLetter = cardLetter;
        this.cardNumber = cardNumber;
        this.nullValue = nullValue;
    }
    public int compareTo(Card c) {
        if(StringUtils.isEmpty(this.cardNumber) || 
           StringUtils.isEmpty(c.cardNumber)) return -1;
        return Integer.parseInt(this.cardNumber) - Integer.parseInt(c.cardNumber);
    }
    public String getOneSpecificNumber() { return cardNumber; }
    public void setCardNumber(String x) {  cardNumber = x; }
}

StringUtils是Apache Commons Lang3的一部分,如果你不想把它包括在你的项目中,那么你可以做这样的事情:

if(null == this.cardNumber || "".equals(this.cardNumber) ||
       null == c.cardNumber || "".equals(c.cardNumber)) return -1;

现在你只需要这样做就可以排序:

Collections.sort(cards);

示例:

System.out.println("n Cards on table");
List<Card> cards = deck.getCards();
Collections.sort(cards);
for (Card c: cards) {
    System.out.print((format("%10s","33[F[ " + c.getOneSpecificNumber())+ " ]"));
}

最新更新