2

假设我有一个数组,其中包含 10 个对象,每个对象有 3 个值应该代表一个排名表

Team1 20 5
Team2 21 6
Team3 21 8
Team4 23 8

我想按第一个值(点)排序,然后按第二个值(目标差)排序。

Arrays.sort()如果我覆盖compareto()并编写一段自定义代码,它将起作用。

有没有更简单的方法?通过转换为列表等?

4

3 回答 3

9

创建一个Comparator是解决这个问题的正确方法。您是否使用Arrays.sort()Collections.sort()取决于您。

我建议前者避免转换为列表,因此更可取。

我建议您不要通过Comparable在对象中实现来解决这个问题,因为这听起来像是一个显示问题,并且在对象本身中嵌入排序顺序可能是不明智的。


一个示例(未经测试)的实现可能是:

public class ExampleComparator implements Comparator<YourObject> {

  public int compare(YourObject o1, YourObject o2) {
    if (o1 == null || o2 == null) {
      throw new NullPointerException();
    }

    if (o1.getValue1() != o2.getValue1()) {
      return Integer.compare(o1.getValue1(), o2.getValue1());
    }

    return Integer.compare(o1.getValue2(), o2.getValue2());
  }
}
于 2013-05-03T07:26:25.267 回答
0

没有捷径可走;将您的数据转换为一个类并覆盖 compareTo 方法。

Class Bean implements Comparable<Bean>{
  //attributes
  @Override
  public int compareTo(Object o) {
    // TODO Auto-generated method stub
    return 0;
 }
} 

然后你可以把你的bean对象放在列表中并进行排序..

List<Bean> list = new ArrayList<Bean>();
于 2013-05-03T07:33:49.553 回答
0

java中没有任何generic允许您使用多个参数执行排序的功能。您必须实现自己的排序算法或创建自己的Comparator. 有关更多详细信息,您应该查看这篇文章。

于 2013-05-03T07:33:04.190 回答