Java List排序4种写法整理

 更新时间:2023年08月24日 09:05:02   作者:悟能的师兄  
这篇文章主要给大家介绍了关于Java List排序4种写法整理的相关资料,在有的时候我们会需要对List进行排序,在Java中如何实现呢,本文记录一下Java中对List的几种排序方式,需要的朋友可以参考下

一:集合元素是基本类型包装类型

public static void main(String[] args)  {
        List<Integer> numList=new ArrayList<>();
        numList.add(999);
        numList.add(123);
        numList.add(456);
        numList.add(66);
        numList.add(9);
        Collections.sort(numList);  //使用Collections类的方法排序
        numList.sort(new Comparator<Integer>() {//使用List接口的方法排序
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        });
        //lambda表达式实现List接口sort方法排序
        numList.sort((num1,num2)->{return num1.compareTo(num2);});
        System.out.println(numList);
    }

二:对象的集合根据某个属性排序

例如:对User对象集合根据User类的age属性排序,默认是升序。不推荐,不推荐,不推荐

public static void main(String[] args)  {
	List<User> numList=new ArrayList<>();
	User u=new User();
	u.setAge(12);
	numList.add(u);
	User u1=new User();
	u1.setAge(34);
	numList.add(u1);
	User u2=new User();
	u2.setAge(6);
	numList.add(u2);
	User u3=new User();
	u3.setAge(99);
	numList.add(u3);
	//Collections类的sort方法对对象集合排序,要传集合和Comparator接口两个参数
	Collections.sort(numList, new Comparator<User>() {
		@Override
		public int compare(User o1, User o2) {
			Integer age1= o1.getAge();
			Integer age2= o2.getAge();
			return  age1.compareTo(age2);
		}
	});
	//List接口自身的sort方法对对象集合排序,重写Comparator接口方法即可
	numList.sort(new Comparator<User>() {
		@Override
		public int compare(User u1, User u2) {
			Integer age1= u1.getAge();
			Integer age2= u2.getAge();
			return  age1.compareTo(age2);
		}
	});
	//List接口的sort方法,lambda表达式写法
   numList.sort((u4,u5)->{
		Integer age1= u4.getAge();
		Integer age2= u5.getAge();
		return  age1.compareTo(age2);
	});
	System.out.println(numList);
}

三:使用Stream流排序

1.首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。
2.使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。
3.Comparator.comparing()里面的内容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword4.最后格式化为需要的格式 List 是.collect(Collectors.toList()) , Map 是 .collect(Collectors.toMap(KeywordCounterDTO::getKey, KeywordCounterDTO::getValue))

根据年龄倒序排
public static void main(String[] args)  {
	List<User> numList=new ArrayList<>();
	User u=new User();
	u.setAge(12);
	numList.add(u);
	User u1=new User();
	u1.setAge(34);
	numList.add(u1);
	User u2=new User();
	u2.setAge(6);
	numList.add(u2);
	User u3=new User();
	u3.setAge(99);
	numList.add(u3);
	numList = numList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
}
先对学生的班级做排序,然后同班级做倒序
public static void main(String[] args)  {
	List<User> numList=new ArrayList<>();
	User u=new User();
	u.setClass(1);
	u.setAge(12);
	numList.add(u);
	User u1=new User();
	u.setClass(1);
	u1.setAge(34);
	numList.add(u1);
	User u2=new User();
	u.setClass(2);
	u2.setAge(6);
	numList.add(u2);
	User u3=new User();
	u.setClass(2);
	u3.setAge(99);
	numList.add(u3);
	numList = numList.parallelStream().sorted(
	  Comparator.comparing(User::getClass).reversed().thenComparing(User::getAge)
	).collect(Collectors.toList());
}

当集合中存在null元素时,可以使用针对null友好的比较器,null元素排在集合的最前面:nullsFirst

public static void main(String[] args)  {
	List<User> numList=new ArrayList<>();
	User u=new User();
	u.setClass(1);
	u.setAge(12);
	numList.add(u);
	User u1=new User();
	u.setClass(1);
	u1.setAge(34);
	numList.add(u1);
	User u2=new User();
	u.setClass(2);
	u2.setAge(6);
	numList.add(u2);
	User u3=new User();
	u.setClass(2);
	u3.setAge(99);
	numList.add(u3);
	numList = numList.parallelStream().sorted(
	  Comparator.nullsFirst(User::getClass).reversed().thenComparing(User::getAge)
	).collect(Collectors.toList());
}

部分参考:https://www.jb51.net/article/232963.htm

总结

到此这篇关于Java List排序4种写法整理的文章就介绍到这了,更多相关Java List排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密功能

    SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密功能

    在Spring Boot生态中,有一个非常厉害的开源框架:Apache ShardingSphere,它是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强,今天通过这篇文章,我们一起来了解一下如何在 Spring Boot 中快速实现数据的加解密功能
    2024-07-07
  • 详解如何实现SpringBoot的底层注解

    详解如何实现SpringBoot的底层注解

    今天给大家带来的文章是如何实现SpringBoot的底层注解,文中有非常详细的介绍及代码示例,对正在学习java的小伙伴很有帮助,需要的朋友可以参考下
    2021-06-06
  • Spring 模拟转账开发实战小结

    Spring 模拟转账开发实战小结

    转账是金融类应用的核心场景之一,涉及付款方扣减金额和收款方增加金额两个关键操作,本文主要介绍了Spring 模拟转账开发实战小结,具有一定的参考价值,感兴趣的可以了解一下
    2025-05-05
  • Springboot无法注入service问题

    Springboot无法注入service问题

    这篇文章主要介绍了Springboot无法注入service的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot JdbcTemplate批量操作的示例代码

    SpringBoot JdbcTemplate批量操作的示例代码

    本篇文章主要介绍了SpringBoot JdbcTemplate批量操作的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 基于Jenkins+Maven+Gitea+Nexus搭建CICD环境的方式

    基于Jenkins+Maven+Gitea+Nexus搭建CICD环境的方式

    这篇文章主要介绍了基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境,大家都知道Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据,需要的朋友可以参考下
    2022-01-01
  • Spring Boot与MyBatis配置与操作实战指南

    Spring Boot与MyBatis配置与操作实战指南

    本文介绍了如何在SpringBoot项目中配置和使用MyBatis,包括环境准备、数据源配置、MyBatis配置、数据操作、事务管理以及高级配置如缓存和插件的使用,通过这些步骤,可以实现高效的数据驱动应用程序开发,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • java获取json中的全部键值对实例

    java获取json中的全部键值对实例

    下面小编就为大家分享一篇java获取json中的全部键值对实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Spring Boot 实现 IP 限流的原理、实践与利弊解析

    Spring Boot 实现 IP 限流的原理、实践与利弊解析

    在Spring Boot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍Spring Boot实现IP限流:原理、实践与利弊分析,感兴趣的朋友跟随小编一起看看吧
    2025-06-06
  • 关于Idea的Invalidate Caches/Restart使用

    关于Idea的Invalidate Caches/Restart使用

    项目类导入爆红可能因Idea缓存异常导致Maven依赖识别失败,解决方法为通过Invalidate Caches/Restart清除缓存,等待重新构建索引后重新进入项目
    2025-07-07

最新评论