使用 2 个条件在 Java 中对列表进行排序
我有一个对象列表。每个对象都包含 a 和 a(以及其他对象)。String
Date
我想先按 排序,然后按 .String
Date
如何以最干净的方式做到这一点?
谢谢!
Krt_Malta
我有一个对象列表。每个对象都包含 a 和 a(以及其他对象)。String
Date
我想先按 排序,然后按 .String
Date
如何以最干净的方式做到这一点?
谢谢!
Krt_Malta
使用Java 8,这真的很容易。鉴于
class MyClass {
String getString() { ... }
Date getDate() { ... }
}
您可以按如下方式对列表轻松排序:
List<MyClass> list = ...
list.sort(Comparator.comparing(MyClass::getString).thenComparing(MyClass::getDate));
给定一个如下所示的对象类:
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());