我想在两个不同的参数上使用Collections.sort()两次

SOP*_*SOP 7 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 == objx)
      return 0;
    else if (classX > objx)
      return 1;
    else
      return -1;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的:

Collections.sort(list1); // But using property1 to sort
Collections.sort(list1); // But using property2 to sort
Run Code Online (Sandbox Code Playgroud)

所以,在第一种情况下,我能够使用property1排序,但如何使用property2排序?我正在尝试使用不同的参数进行排序,但compareTo()只接受一个参数.

小智 6

您可以为每个属性创建两个不同的比较器,并将其传递给

Collections.sort(list1, comparator1);
Collections.sort(list1, comparator2);
Run Code Online (Sandbox Code Playgroud)


Rod*_*lfo 6

如果要使用两种不同的属性,则需要使用两种不同的比较器.

比较器是实现接口Comparator的类

public class EmpSort {
    static final Comparator<Employee> comp1 = new Comparator<Employee>() {
        public int compare(Employee e1, Employee e2) {
            // use prperty1 to sort
            return e2.hireDate().compareTo(e1.hireDate());
        }
    };
}
public class EmpSort2 {
    static final Comparator<Employee> comp2 = new Comparator<Employee>() {
        public int compare(Employee e1, Employee e2) {
            // use prperty2 to sort
            return e2.hireDate().compareTo(e1.hireDate());
        }
    };
}

Collections.sort(list1, comp1);//but using prperty1 to sort
Collections.sort(list1, comp2);//but using prperty2 to sort
Run Code Online (Sandbox Code Playgroud)

一个相关问题集合排序(List <T>,Comparator <?super T>)方法示例


Ste*_*veL 6

    Collections.sort(list1, new Comparator<T>() {
        public int compare(T arg0, T arg1) {
            //your compare logic for prperty1
        }
    });
    Collections.sort(list1, new Comparator<T>() {
        public int compare(T arg0, T arg1) {
            //your compare logic for prperty2
        }
    });
Run Code Online (Sandbox Code Playgroud)


Flo*_*own 5

Java 8 在 Comparator 接口中提供了一些方便的功能。

Collections.sort(list, Comparator.comparingInt(Field::getX));
Collections.sort(list, Comparator.comparingInt(Field::getY));
Run Code Online (Sandbox Code Playgroud)

如果你想嵌套比较器,还有一些不错的函数。

Collections.sort(list, Comparator.comparingInt(Field::getX).thenComparingInt(Field::getY));
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2136 次

最近记录:

10 年,9 月 前