java-编写一个基于多个字段排序的比较器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-编写一个基于多个字段排序的比较器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2402字,纯文字阅读大概需要4分钟。
内容图文
![java-编写一个基于多个字段排序的比较器](/upload/InfoBanner/zyjiaocheng/682/9cf31dba2cb84b44ac17c0eaa7a445d6.jpg)
我有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-编写一个基于多个字段排序的比较器全部内容,希望文章能够帮你解决java-编写一个基于多个字段排序的比较器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。