java-编写一个基于多个字段排序的比较器
作者:互联网
我有3个数据字段,我们将其命名为字段1,字段2,字段3
现在让我们说这些值:
Field 1 Field 2 Field 3
1 3 4
2 3 3
3 3 5
4 2 5
我该如何编写一个比较器,使其排序,使我将字段1升序排列,如果字段2相等,则它将按降序对字段3排序.结果应该是这样的:
Field 1 Field 2 Field 3
1 3 5
2 3 4
3 3 3
4 2 5
我可能需要交换值,但这没关系.
解决方法:
编辑:我误解了问题.此解决方案按字段1,字段2,字段3排序.这不是OP所要的.
我怀疑您有一个包含这三个字段的Java对象.我假设可以通过getter访问它们.我还将假设您的对象存储在某种列表中.
您尚未指定要使用的Java版本,因此我将使用Java 8解决方案.可以将其与Java的早期版本一起使用,但是会更加冗长.
List<MyObject> myObjects = Arrays.asList(new MyObject(1, 2, 3),
new MyObject(0, 1, 2),
new MyObject(1, 1, 1),
new MyObject(1, 1, 0),
new MyObject(1, 2, 1));
List<MyObject> sortedList = myObjects.stream()
.sorted(Comparator.comparing(MyObject::getField1)
.thenComparing(MyObject::getField2)
.thenComparing(MyObject::getField3))
.collect(Collectors.toList());
System.out.println(sortedList);
该程序输出
[0-1-2, 1-1-0, 1-1-1, 1-2-1, 1-2-3]
该解决方案将Java 8 Stream API与sorted()方法结合使用,使您可以轻松地对Stream进行排序.排序是通过使用Comparator实现的,Comparator是一个简单的类,可以确定两个实例中的哪个“大于”另一个实例.
感谢Comparator.comparing()方法,创建一个基于字段比较实例的比较器非常简单.基于多个字段进行比较是使用.thenComparing()链接返回的Comparator的简单过程.
Java 8方法引用用于引用字段的getter.
完整代码:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class MyObject
{
private int field1;
private int field2;
private int field3;
public MyObject(int field1,
int field2,
int field3)
{
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
public int getField1()
{
return field1;
}
public int getField2()
{
return field2;
}
public int getField3()
{
return field3;
}
@Override
public String toString()
{
return field1 + "-" + field2 + "-" + field3;
}
public static void main(String[] args)
{
List<MyObject> myObjects = Arrays.asList(new MyObject(1, 2, 3),
new MyObject(0, 1, 2),
new MyObject(1, 1, 1),
new MyObject(1, 1, 0),
new MyObject(1, 2, 1));
List<MyObject> sortedList = myObjects.stream()
.sorted(Comparator.comparing(MyObject::getField1)
.thenComparing(MyObject::getField2)
.thenComparing(MyObject::getField3))
.collect(Collectors.toList());
System.out.println(sortedList);
}
}
标签:java-7,java,sorting 来源: https://codeday.me/bug/20191027/1944594.html