Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中按两个字段排序并指定排序方向?_Java_Sorting_Java 8 - Fatal编程技术网

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

如何在Java中按两个字段排序并指定排序方向?,java,sorting,java-8,Java,Sorting,Java 8,我有一个对象列表,我想用两个属性对它进行排序。我在互联网上搜索过,我在Java8中找到了这个解决方案 class ClassA { String var2; String var1; // getters and setters } List<classA> list; list.sort(Comparator.comparing(ClassA::getVar1).thenComparing(ClassA::getVar2)); A类{ 字符串var2;

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

class ClassA {
    String var2; 
    String var1;
    // getters and setters
}

List<classA> list;
list.sort(Comparator.comparing(ClassA::getVar1).thenComparing(ClassA::getVar2));
A类{
字符串var2;
字符串var1;
//接球手和接球手
}
名单;
list.sort(Comparator.comparing(ClassA::getVar1)。然后比较(ClassA::getVar2));

这绝对有效且完美,但我想在var2上使用降序排序,在var1上使用升序排序

只需添加一个
反转的

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

只需添加一个反向的

list.sort(Comparator.comparing(ClassA::getVar1)
                   .thenComparing(Comparator.comparing(ClassA::getVar2).reversed()));
您需要实现接口

像这样的事情:

class A implements Comparable{
    @Override public int compareTo(A anObjectA) {
        if (this == anObjectA) return 0;
        int ret = var2.compareTo(anObjectA.var2);
        if(ret == 0)
        ...
    }
}
您需要实现接口

像这样的事情:

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())
来使用它,您可以使用java Compariable接口。类似这样的方法可能会奏效:

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(newclassacomparator())来使用它

您的示例中有两次
ClassA::var2
。我编辑了使我认为正确的内容…您的示例中有两次
ClassA::var2
。我编辑了使我认为正确的内容…我尝试了一下,但问题在var1和var2@kimo815请提供一个最简单的例子,说明你到底在做什么是什么意思?@Eugene我怀疑OP可能与你的括号不匹配我试过了,但问题是它在var1和var2@kimo815能不能提供一个简单的例子来说明你的确切意思?@Eugene我怀疑OP可能与你的括号不匹配