使用 2 个条件在 Java 中对列表进行排序

2022-09-03 16:23:03

我有一个对象列表。每个对象都包含 a 和 a(以及其他对象)。StringDate

我想先按 排序,然后按 .StringDate

如何以最干净的方式做到这一点?

谢谢!

Krt_Malta


答案 1

使用Java 8,这真的很容易。鉴于

class MyClass {
    String getString() { ... }
    Date getDate() { ... }
}

您可以按如下方式对列表轻松排序:

List<MyClass> list = ...
list.sort(Comparator.comparing(MyClass::getString).thenComparing(MyClass::getDate));

答案 2

给定一个如下所示的对象类:

public class MyObject {
    public String getString() { ... }
    public Date getDate() { ... }
    ...
}

编写一个自定义比较器类,如下所示:

public class ObjectComparator implements Comparator{

    public int compare(Object obj1, Object obj2) {
        MyObject myObj1 = (MyObject)obj1;
        MyObject myObj2 = (MyObject)obj2;
        stringResult = myObj1.getString().compareTo(myObj2.getString());
        if (stringResult == 0) {
            // Strings are equal, sort by date
            return myObj1.getDate().compareTo(myObj2.getDate());
        }
        else {
            return stringResult;
        }
    }
}

然后按如下方式排序:

Collections.sort(objectList, new ObjectComparator());

推荐