Java对象集合按照指定元素顺序排序的实现
更新时间:2024年07月02日 11:52:18 作者:smileNicky
最近在对一个集合列表的数据进行排序,需求是要集合数据按照一个排序状态值进行排序,而这个状态值,不是按照从小到大这样的顺序排序的,而是要按照特定的顺序,所以本文给大家介绍了Java对象集合按照指定元素顺序排序的实现,需要的朋友可以参考下
需求背景
最近在对一个集合列表的数据进行排序,需求是要集合数据按照一个排序状态值进行排序,而这个状态值,不是按照从小到大这样的顺序排序的,而是要按照特定的顺序,比如按照1, 0, 2
的顺序排的,所以需要自定义一个排序工具类来实现
解决方案
写一个排序工具类
package cn.nzp.ems.ecb.server.business.screen; import java.io.Serializable; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class CustomizeNumComparator implements Comparator<Integer>, Serializable { private static final long serialVersionUID = 6076418974912880405L; List<Integer> numList = Stream.of(1, 0, 2).collect(Collectors.toList()); @Override public int compare(Integer o1, Integer o2) { int i1 = numList.indexOf(o1); int i2 = numList.indexOf(o2); return (i1 == -1 || i2 == -1) ? (i2 - i1) : i1 - i2; } }
测试一下排序
@Test public void testCompare() { List<RecordDto> list = Lists.newArrayList(); RecordDto record01= new RecordDto(); record01.setOrderNum(2); record01.setSName("测试名称1"); RecordDto record02= new RecordDto(); record02.setOrderNum(0); record02.setSName("测试名称2"); RecordDto record03 = new RecordDto(); record03.setOrderNum(1); record03.setSName("测试名称3"); RecordDto record04= new RecordDto(); record04.setOrderNum(2); record04.setSName("测试名称4"); RecordDto record05= new RecordDto (); record05.setOrderNum(0); record05.setSName("测试名称5"); list.add(record01); list.add(record02); list.add(record03); list.add(record04); list.add(record05); list = list.stream() .sorted(Comparator.comparing(RecordDto::getOrderNum, new CustomizeNumComparator())) .collect(Collectors.toList()); list.stream().forEach(e -> { System.out.println(e.getName() +", " + e.getOrderNum()); }); }
跑一下测试结果
如果不想写一个排序工具类,也可以创建一个Comparator
即可
public void testCompare() { List<Integer> numList = Stream.of(1, 0, 2).collect(Collectors.toList()); Comparator<RecordDto> comparingIndex = Comparator.comparing(record -> { final int index = numList.indexOf(record.getOrderNum()); return index == -1 ? Long.MAX_VALUE : index; }); list = list.stream() .sorted(comparingIndex.thenComparing(RecordDto::getCreateTime, Comparator.nullsLast(Date::compareTo))) .collect(Collectors.toList()); }
到此这篇关于Java对象集合按照指定元素顺序排序的实现的文章就介绍到这了,更多相关Java指定元素顺序排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java通过cellstyle属性设置Excel单元格常用样式的全面总结讲解
在处理Excel文件时,经常需要对单元格进行样式设置,以满足特定的需求和美化要求,这篇文章主要给大家介绍了关于Java通过cellstyle属性设置Excel单元格常用样式的相关资料,需要的朋友可以参考下2024-01-01
最新评论