如何在 Java 中按两个字段排序并指定排序方向?



我有一个对象列表,我想使用两个属性对其进行排序。 我在互联网上搜索过,我在Java 8中找到了这个解决方案。

class ClassA {
String var2; 
String var1;
// getters and setters
}
List<classA> list;
list.sort(Comparator.comparing(ClassA::getVar1).thenComparing(ClassA::getVar2));

这绝对有效且完美,但我想要的是使用 var2 上的降序排序和 var1 上的升序排序。

就像添加一个reversed一样简单...

list.sort(Comparator.comparing(ClassA::getVar1)
.thenComparing(Comparator.comparing(ClassA::getVar2).reversed()));

您需要实现 Comparable 接口。

像这样索姆特兴:

class A implements Comparable{
@Override public int compareTo(A anObjectA) {
if (this == anObjectA) return 0;
int ret = var2.compareTo(anObjectA.var2);
if(ret == 0)
...
}
}

你可以使用 java 可比较的接口。这样的事情可以工作:

import java.util.*;  
class classAComparator implements Comparator{  
public int compareTo(classA a,classA b){ 
int res = a.var2.compareTo(b.var2);
if(res == 0) { //var2 was the same
//compare using var1 in descending order
}
return res;
}             

您将通过运行list.sort(new classAComparator())来使用它

最新更新