ArrayList 中的 Java 字符串对象

标签 java string sorting arraylist collections

在我的 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())+ " ]"));}

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

知道我能做什么吗?

卡片类别

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","\033[F[ " + c.getOneSpecificNumber())+ " ]"));
}

关于ArrayList 中的 Java 字符串对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36247651/

相关文章:

java - 如何在 Java 表达式中编写复利公式?

java - Java 中的日期到日期的转换

java - 搜索 url 中的字符串

C# 通用字符串解析为任何对象

javascript - 插入一个新数组并在 JavaScript 中过滤冗余对象

在 MapReduce 中排序产生额外的值

python - 按字符串中正斜杠的数量对以字符串为值的字典进行排序

java - RecyclerView 需要时间在 Fragment 中加载 Adapter 值

java - 使用什么版本的 Apache Tika 来创建以下示例 Tika 代码?

python - 如何检查 pandas 中的列是否以 a 或 b 结尾