Java 我想在两个不同的参数上使用Collections.sort()两次
我有一个要使用不同属性排序的对象列表Java 我想在两个不同的参数上使用Collections.sort()两次,java,sorting,comparator,Java,Sorting,Comparator,我有一个要使用不同属性排序的对象列表 @Override public int compareTo(Object obj) { Field tab = (Field) obj; int objx = Integer.parseInt(tab.getX()); // int objy = Integer.parseInt(tab.getY()); int classX = Integer.parseInt(this.X); if (classX ==
@Override
public int compareTo(Object obj)
{
Field tab = (Field) obj;
int objx = Integer.parseInt(tab.getX());
// int objy = Integer.parseInt(tab.getY());
int classX = Integer.parseInt(this.X);
if (classX == objx)
return 0;
else if (classX > objx)
return 1;
else
return -1;
}
到目前为止,我所拥有的:
Collections.sort(list1); // But using property1 to sort
Collections.sort(list1); // But using property2 to sort
所以,在第一种情况下,我可以使用property1进行排序,但是如何使用property2进行排序呢?
我试图使用不同的参数进行排序,但是
compareTo()
只接受一个参数。您可以为每个属性创建两个不同的比较器,一个用于该属性,然后将其传递给
Collections.sort(list1, comparator1);
Collections.sort(list1, comparator2);
如果要使用两个不同的属性,则需要使用两个不同的比较器 比较器是实现接口的类
公共类EmpSort{
静态最终比较器comp1=新比较器(){
公共整数比较(员工e1、员工e2){
//使用prperty1进行排序
返回e2.hireDate().compareTo(e1.hireDate());
}
};
}
公共类经营者2{
静态最终比较器comp2=新比较器(){
公共整数比较(员工e1、员工e2){
//使用prperty2进行排序
返回e2.hireDate().compareTo(e1.hireDate());
}
};
}
Collections.sort(列表1,comp1)//但是使用prperty1进行排序
Collections.sort(列表1,comp2)//但是使用prperty2进行排序
一个相关的问题是Collections.sort(列表1,新的Comparator(){
公共整数比较(T arg0,T arg1){
//您的prperty1比较逻辑
}
});
Collections.sort(list1,newcomparator(){
公共整数比较(T arg0,T arg1){
//您的prperty2比较逻辑
}
});
Java 8在Comparator接口中提供了一些方便的功能
Collections.sort(list, Comparator.comparingInt(Field::getX));
Collections.sort(list, Comparator.comparingInt(Field::getY));
如果您想嵌套比较器,还有一些很好的函数
Collections.sort(list, Comparator.comparingInt(Field::getX).thenComparingInt(Field::getY));
如上所示,我正在重写comparto(objectob)方法,您需要编写两个单独的比较器,重写每个compareTo()方法,然后传递它们。目前你只写了一篇。你需要为不同的属性编写另一个类。你的意思是说我必须创建一个包含两个不同比较器的不同类。如果你想,你可以使用匿名类。
Collections.sort(list, Comparator.comparingInt(Field::getX));
Collections.sort(list, Comparator.comparingInt(Field::getY));
Collections.sort(list, Comparator.comparingInt(Field::getX).thenComparingInt(Field::getY));