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

时间:2018-08-16 15:09:28

标签: java sorting java-8

我有一个对象列表,我想使用两个属性对其进行排序。我已经在互联网上搜索过,并且在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使用升序排序。

3 个答案:

答案 0 :(得分:5)

就像添加reversed ...

一样简单
list.sort(Comparator.comparing(ClassA::getVar1)
                   .thenComparing(Comparator.comparing(ClassA::getVar2).reversed()));

答案 1 :(得分:0)

您需要实现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)
        ...
    }
}

答案 2 :(得分: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())

使用它