ArrayList中的Java Strings对象

use*_*506 2 java sorting string collections arraylist

在我的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","\033[F[ " + c.getOneSpecificNumber())+ " ]"));}
Run Code Online (Sandbox Code Playgroud)

这打印出我的随机卡号.但问题是它们没有按数字排序,

知道我能做什么吗?

卡类

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,""));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*685 5

为了按照你的类对cards数组进行排序,必须实现和覆盖.cardNumberCardComparablecompareTo()

这是代码片段:

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; }
}
Run Code Online (Sandbox Code Playgroud)

StringUtils 是Apache Commons Lang3的一部分,如果您不想将它包含在您的项目中,那么您可以执行以下操作:

if(null == this.cardNumber || "".equals(this.cardNumber) ||
       null == c.cardNumber || "".equals(c.cardNumber)) return -1;
Run Code Online (Sandbox Code Playgroud)

现在你必须这样做才能排序:

Collections.sort(cards);
Run Code Online (Sandbox Code Playgroud)

例:

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