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与MySQL时间不一致问题解决

    Java与MySQL时间不一致问题解决

    本文主要介绍了Java与MySQL时间不一致问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Mybatis一级缓存和结合Spring Framework后失效的源码探究

    Mybatis一级缓存和结合Spring Framework后失效的源码探究

    这篇文章主要介绍了Mybatis一级缓存和结合Spring Framework后失效的源码探究,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • java中多态概念、实现原理详解

    java中多态概念、实现原理详解

    JAVA中多态性是对象多种表现形式的体现。在面向对象中,最常见的多态发生在使用父类的引用来引用子类的对象。下面这篇文章主要给大家介绍一下,需要的朋友可以参考下
    2017-04-04
  • 关于Swagger注释API的使用说明

    关于Swagger注释API的使用说明

    这篇文章主要介绍了关于Swagger注释API的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • idea中使用SonarLint进行代码规范检测及使用方法

    idea中使用SonarLint进行代码规范检测及使用方法

    这篇文章主要介绍了idea中使用SonarLint进行代码规范检测,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Java实现RSA算法的方法详解

    Java实现RSA算法的方法详解

    这篇文章主要介绍了Java实现RSA算法的方法,结合实例形式分析了RSA算法的原理、实现与使用方法,需要的朋友可以参考下
    2018-03-03
  • Java postgresql数组字段类型处理方法详解

    Java postgresql数组字段类型处理方法详解

    这篇文章主要介绍了Java postgresql数组字段类型处理方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • OAuth2生成token代码备忘实现过程示例

    OAuth2生成token代码备忘实现过程示例

    这篇文章主要为大家介绍了OAuth2生成token代码备忘实现过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Java中将List拆分为多个小list集合的实现代码

    Java中将List拆分为多个小list集合的实现代码

    这篇文章主要介绍了Java中如何将List拆分为多个小list集合,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java日常练习题,每天进步一点点(31)

    Java日常练习题,每天进步一点点(31)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07

最新评论