如何在Java中按两个字段排序并指定排序方向?
我有一个对象列表,我想用两个属性对它进行排序。我在互联网上搜索过,我在Java8中找到了这个解决方案如何在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;
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可能与你的括号不匹配