【问题标题】:ArrayList sorting using multiple CompareTo to sort attributes in single class使用多个 CompareTo 对单个类中的属性进行排序的 ArrayList 排序
【发布时间】:2020-11-20 08:37:03
【问题描述】:

我正在尝试调用一种方法,该方法将按目标或胜利对 ArrayList 进行排序。我的 FootballClub 类中已经有一个 compareTo,它对有效的目标进行排序。有没有办法让我有多个 compareTo 来对不同的属性进行排序,例如在调用我的 sortGoals 或 sortWins 方法时可以调用的目标或胜利?

public class FootballClub extends SportsClub implements Comparable <FootballClub> {

int wins = 0;
int goals = 0;
int points = 0;

//other methods above 

@Override
public int compareTo(FootballClub o) {
    int compareGoals=((FootballClub)o).getGoals();
    return this.goals-compareGoals;
   }
}

【问题讨论】:

  • 旁注:现有的compareTo 方法可以改进:1) 将o 转换为FootballClub 是多余的; 2) 一般建议使用Integer::compare 而不是减法,即使整数溢出的可能性不大。所以,它可能是public int compareTo(FootballClub fc) { return Integer.compare(this.goals, fc.getGoals()); }
  • 哦,好的,谢谢你让我知道,不知道。我会改的

标签: java sorting arraylist compareto


【解决方案1】:

您可以在排序时传递任何比较器,compareTo 是在没有指定比较器时使用的(您的类的自然比较器):

自然比较器也是Java内部用于String等的,这样就不需要每次都指定比较器了。 示例:public final class String implements java.io.Serializable, Comparable&lt;String&gt;, CharSequence {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多