Java List集合排序 Java8 List集合排序方法 Java Lambda集合排序

一、概述

Java中集合排序,在Java8之前,可以通过 Collections类的sort方法进行排序;Java8之后,新增 lambda和stream ,都增加了相关的排序方法,本文将整理下常见的三种排序方法。

分别是:

  • List 接口中的 sort 方法
  • Stream 接口中的 sorted 方法
  • Collections.sort 工具类方法

二、准备工作

1、创建一个User类,相关属性如下:

public static class User{int id ;String name ;int age ;String addr ;public User(int id, String name, int age, String addr) {this.id = id;this.name = name;this.age = age;this.addr = addr;}// ignore getter/setter/toString
}

2、单元测试类,准备工作

public class ListSortTest {List<User> userList =  null;@Beforepublic void init(){userList =  Lists.newArrayList();userList.add(new User(1,"小明",22,"北京"));userList.add(new User(2,"小红",18,"上海"));userList.add(new User(3,"小花",22,"广州"));userList.add(new User(4,"小刚",33,"深圳"));System.out.println("原始数据是:"+userList);}@Afterpublic void after(){System.out.println("执行完毕===");}}

三、List接口中sort方法排序

1、List.sort方法排序

/**@Description: List接口中sort方法排序* <br> 直接改变 原list集合顺序* @version v1.0* @author wu* @date 2022/6/22 16:40*/
@Test
public void ListSortTest(){userList.sort((u1,u2)->u1.getAge()-u2.getAge());System.out.println("按照年龄排序ASC:"+userList);// 使用 Compator 方法userList.sort(Comparator.comparing(User::getId).reversed());System.out.println("使用 Compator 方法:"+userList);
}

2、多条件排序

    @Testpublic void ListSortTest2(){// 多条件排序: 年龄asc,id DESC
//        userList.sort(Comparator.comparing(User::getAge).thenComparing(User::getId).reversed());System.out.println("多条件排序: 年龄asc,id DESC:"+userList); // 不满足需求userList.sort(Comparator.comparing(User::getAge));userList.sort(Comparator.comparing(User::getId).reversed());System.out.println("多条件排序2: 年龄asc,id DESC:"+userList);}

四、Stream中的sort方法排序

1、使用Stream中的sort方法排序

/**@Description: 使用Stream中的sort方法排序* <br> Stream 方法,不会改变原集合数据顺序,会生成新的List* @version v1.0* @author wu* @date 2022/6/22 16:56*/
@Test
public void ListStramSortTest(){// stream 方法排序, 需要返回新的 ListList<User> collect = userList.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());System.out.println("Stream id DESC : "+ collect);List<User> collect1 = userList.stream().sorted((u1, u2) -> u2.getAge() - u1.getAge()).collect(Collectors.toList());System.out.println("Stream age DESC : "+ collect1);
}

2、并行的stream 排序

@Test
public void ListStramSortTest2(){// 并行的stream 排序List<User> collect = userList.parallelStream().sorted((u1, u2) -> {// 年龄 ASC , ID DESC 排序int age = u1.getAge() - u2.getAge();if(age == 0 ){// 年龄相等,则排序 idreturn u2.getId()- u1.getId();}return age ;}).collect(Collectors.toList());System.out.println("parallelStream - 年龄 ASC , ID DESC 排序: " + collect);
}

五、Collections类的sort方法排序

1、java8前,匿名内部类方法

/**@Description: Collections 类的sort方法* <br> 直接操作原List数据* @version v1.0* @author wu* @date 2022/6/22 17:11*/
@Test
public void CollectionsSortTest(){// 原始方法Collections.sort(userList, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {return o2.getAge()-o1.getAge();}});System.out.println("Collections.sort 原始方法:"+userList);
}

2、使用 lambda实现排序


@Test
public void CollectionsSortTest2(){Collections.sort(userList,(u1,u2)->u2.getId()-u1.getId());System.out.println("Collections.sort lambda :" +userList);Collections.sort(userList,Comparator.comparing(User::getAge));System.out.println("Collections.sort lambda comparing :" +userList);
}

六、总结

1、Java8中,排序的方式有:List 接口中的 sort 方法 、 Stream 接口中的 sorted 方法、Collections.sort 工具类方法 。

2、区别是:

  • List 接口中的 sort 方法 --- 操作原数据
  • Stream 接口中的 sorted 方法 --- 返回新List
  • Collections.sort 工具类方法 --- 操作原数据

Java List集合排序 Java8 List集合排序方法 Java Lambda集合排序相关推荐

  1. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.m ...

  2. java set iterator_Java中的TreeSet的iterator()方法 Java.util.TreeSet.iterator() - Break易站

    Java中的TreeSet Java.util.TreeSet.iterator()方法用于返回与TreeSet相同元素的迭代器.元素以随机顺序从树集中的内容返回. 句法: Iterator iter ...

  3. 传智播客java基础的习题_传智播客java基础班(集合与IO)阶段测试题

    本帖最后由 zhaodecang 于 2016-6-8 19:38 编辑 单选题:(每道题目2分) 1. ArrayList类的底层数据结构是(    ) a) 数组结构b) 链表结构  c) 哈希表 ...

  4. java学习(尚硅谷)集合之Collection接口中的方法

    又是好几天没有学Java了,今天下午睡了个觉状态很好,来到图书馆写了点C++的项目代码,写累了看了几集康师傅.笔记如下: Collection接口中的方法: package com.atguigu.j ...

  5. 最全面的Java面试题-----是你更好的掌握java知识

    最全面的Java面试题-----是你更好的掌握java知识 目录 l     概念题--- 1 一.        JAVA基础--- 1 1)      面向对象的特征--- 1 2)      什 ...

  6. java创建画板_Java版画板的实现方法

    Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现. 基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图的实现,三是画板的重绘.(文 ...

  7. Java 11:String类中的新方法

    Java 11:String类中的新方法 Java 11没有很多特定于语言的功能.因此,令人惊讶的是,在Java String Class中引入了6种新方法. Java 11 String类新方法 让 ...

  8. Java创建并执行线程的四种方法

    Java创建并执行线程的四种方法 java里面创建线程有四种方式: 无返回: 实现Runnable接口,重写run(); 继承Thread类,重写run(); 有返回: 实现Callable接口,重写 ...

  9. Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法

    public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...

  10. java list 拼音排序_java中实现List集合中对象元素按其属性的中文拼音排序

    java中List集合的元素是按照添加顺序排序的,我们在实际开发过程中,可能会遇到需要对其内容进行排序的场景,接下来对我遇到的场景所采用的解决方式做个总结. 一.业务场景 管理后台商户名称下拉列表,需 ...

最新文章

  1. 媒体查询 响应式设计
  2. java excel jxls_java通过jxls框架实现导入导出excel文件实例
  3. locker server启动
  4. NCF框架揭秘直播来了!红包、抽奖、还有神秘嘉宾…(内含彩蛋)
  5. ubuntu 14 java web服务器搭建
  6. java抽象类的属性_JAVA 抽象类
  7. ThreeJs 数据可视化学习扫盲
  8. 好心情患者故事:节食暴食反复横跳,我确诊了重度抑郁
  9. 360全景倒车影像怎么看_倒车注意了!路证人360度全景倒车影像实时显示动态轨迹,轻松倒车泊车...
  10. 冒泡排序和鸡尾酒排序
  11. 自适应Simpson法P4525 【模板】自适应辛普森法1
  12. 防红域名生成的3种方法介绍
  13. win10系统 删掉自带的输入法
  14. transformers中GLUE各个任务所用的评估方法
  15. 富芮坤fr8008gp lvgl遇坑和解法:卡死在lvgl定时器中;SWD接口配置;
  16. 大量的Oracle数据库视频教程提供下载
  17. 可可粉的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 简述 Linux DRM 架构
  19. 语法规范:BNF与ABNF 巴斯克范式
  20. Flutter-实现图片圆角的几种方式

热门文章

  1. 【VBA编程】VBA基础语法(一)
  2. Python 实现窗函数
  3. 在consul中删除服务
  4. 迅捷CAD编辑器中图纸加密的办法
  5. 选择SMA射频连接头的注意事项
  6. 微信小程序获取用户头像和昵称能力调整!新的代替方案!
  7. uniapp引入阿里图标库
  8. 使用makefile生成.so文件
  9. @RunWith报错/SpringJUnit4ClassRunner报错或无法使用
  10. android 框架作用是什么意思,Android系统上的Xp框架有什么用