Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我想在两个不同的参数上使用Collections.sort()两次_Java_Sorting_Comparator - Fatal编程技术网

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));