java 多列排序_java-编写一个基于多个字段排序的比较器

本文介绍了如何在Java中编写一个比较器,实现基于多个字段的排序。具体来说,是根据字段1升序,字段2相同时按字段3降序进行排序。示例代码展示了如何使用Java 8的Stream API和Comparator进行多字段排序。
摘要由CSDN通过智能技术生成

我有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 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 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 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 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值