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排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot2 整合Ehcache组件,轻量级缓存管理的原理解析

    SpringBoot2 整合Ehcache组件,轻量级缓存管理的原理解析

    这篇文章主要介绍了SpringBoot2 整合Ehcache组件,轻量级缓存管理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • java多线程之CyclicBarrier的使用方法

    java多线程之CyclicBarrier的使用方法

    这篇文章主要介绍了java多线程之CyclicBarrier的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • 如何在springboot中引入参数校验

    如何在springboot中引入参数校验

    一般我们判断前端传过来的参数,需要对某些值进行判断,是否满足条件,而springboot相关的参数校验注解,可以解决我们这个问题,本文给大家介绍如何在springboot中引入参数校验,感兴趣的朋友一起看看吧
    2023-12-12
  • Java实现经典游戏超级玛丽的示例代码

    Java实现经典游戏超级玛丽的示例代码

    在你的童年记忆里,是否有一个蹦跳、顶蘑菇的小人?本文将用java语言实现经典游戏《超级玛丽》,文中采用了swing技术进行了界面化处理,需要的可以参考一下
    2022-02-02
  • mybatis-plus雪花算法自动生成机器id原理及源码

    mybatis-plus雪花算法自动生成机器id原理及源码

    Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变,Mybatis-Plus是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等,下面一起看看mybatis-plus雪花算法自动生成机器id原理解析
    2021-06-06
  • AsyncHttpClient的ConnectionSemaphore方法源码流程解读

    AsyncHttpClient的ConnectionSemaphore方法源码流程解读

    这篇文章主要为大家介绍了AsyncHttpClient的ConnectionSemaphore方法源码流程解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Springboot中@RequestParam和@PathVariable的用法与区别详解

    Springboot中@RequestParam和@PathVariable的用法与区别详解

    这篇文章主要介绍了Springboot中@RequestParam和@PathVariable的用法与区别详解,RESTful API设计的最佳实践是使用路径参数来标识一个或多个特定资源,而使用查询参数来对这些资源进行排序/过滤,需要的朋友可以参考下
    2024-01-01
  • Java解析Excel内容的方法

    Java解析Excel内容的方法

    这篇文章主要介绍了Java解析Excel内容的方法,实例分析了java解析excel文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • ireport数据表格报表的简单使用

    ireport数据表格报表的简单使用

    这篇文章给大家介绍了如何画一个报表模板,这里介绍下画表格需要用到的组件,文中通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-10-10
  • Springboot如何设置过滤器及重复读取request里的body

    Springboot如何设置过滤器及重复读取request里的body

    这篇文章主要介绍了Springboot如何设置过滤器及重复读取request里的body,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论