假设我有一个数组,其中包含10个对象,每个对象具有3个应该代表联赛表的值
Team1 20 5
Team2 21 6
Team3 21 8
Team4 23 8
我想按第一个值(点数)排序,然后按第二个值(目标差异)排序。
如果我覆盖Arrays.sort()
并编写一段自定义代码,那么 compareto()
将起作用。
有更简单的方法吗?通过转换为列表等?
答案 0 :(得分: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());
}
}
答案 1 :(得分:0)
java中没有任何generic
,允许您使用多个参数执行排序。您必须实现自己的排序算法或创建自己的Comparator
。有关详细信息,您应该有look at this post.
答案 2 :(得分: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>();