使用迭代器返回列表中最高值的方法(Java)

时间:2016-03-31 14:50:17

标签: java iterator compareto

我正在研究Java中的卡片类,我不确定某种方法的实现。我需要包含一个静态方法(我称之为max),它使用compareTo方法查找并返回卡片列表中的最高价值卡片。但是,我需要使用迭代器来遍历列表。

下面是我实现的compareTo方法。它按照降序对卡进行排序,首先按照匹配排名。

public int compareTo(Card card) {

if (this.rank.compareTo(card.rank) > 0){
    return 1;
} else if (this.rank.compareTo(card.rank) < 0){
    return -1;
} else {

    if(this.suit.compareTo(card.suit) > 0){
        return 1;
    } else if (this.suit.compareTo(card.suit) < 0){
        return -1;
    } else {
        return 0;
    }

}

我还包括我的两个关于西装和排名的枚举。

enum Rank{TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), 
          NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

          private int value;

          Rank(int i){
              value=i;
          }

          public int getValue(){
              return value;
          }

          public Rank getPrevious(){
              return values()[ordinal() > 0 ? ordinal()  - 1 : 0];
          } 

}   


enum Suit{CLUBS, DIAMONDS, HEARTS, SPADES;

          public static Suit randomSuit(){
              Random random = new Random();
              return values()[random.nextInt(values().length)];

          }            
}

我不想包括整个类,所以事情不会让人感到困惑,但它包含了Rank和Suit类型的变量,等级和套装以及单个构造函数。 rank和suit的访问器方法和toString()方法。

我在答案后做了一个粗略的方法。

Iterator<E> it = collection.iterator;
E max = null;
while(it.hasNext()) {
    if(max == null) {
        max = it.next();
    } else {
        e = it.next();
        if(e.compareTo(max) > 0) {
            max = e;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果您只需要最大值,则无需对列表进行实际排序。代替:

  • 验证列表是否至少包含一个元素,即it.hasNext() == true
  • 将第一个值(it.next())存储在变量
  • 在while循环中迭代列表的其余部分,每当您所在的项目高于变量中的项目时,将新的max存储在变量中
  • 最后,变量将保持最大值