【Java基础】Java8 使用 stream().sorted()对List集合进行排序

简介: Java8 使用 stream().sorted()对List集合进行排序

一、集合对象定义

使用stream().sorted()进行排序,需要该类实现 Comparable 接口,该接口只有一个方法需要实现,如下:

publicintcompareTo(To);

有关compareTo方法的实现说明,请参考:Java 关于重写compareTo方法


集合对象以学生类(Student)为例,有学生的基本信息,包括:姓名,性别,年龄,身高,生日几项。


我的学生类代码如下:

packagecom.iot.productmanual.controller;
importio.swagger.annotations.ApiModel;
importio.swagger.annotations.ApiModelProperty;
importlombok.AllArgsConstructor;
importlombok.Data;
importlombok.NoArgsConstructor;
importjava.time.LocalDate;
importjava.util.List;
/*** <p>Student此类用于:学生信息实体 </p>* <p>@author:hujm</p>* <p>@date:2023年01月12日 18:36</p>* <p>@remark:注意此处加了Lombok的@Data、@AllArgsConstructor、@NoArgsConstructor注解,所以此类的Getter/Setter/toString/全参构造/无参构造都省略 </p>*/@Data@ApiModel(value="学生信息实体")
@AllArgsConstructor@NoArgsConstructorpublicclassStudentimplementsComparable<Student> {
@ApiModelProperty("姓名")
privateStringname;
@ApiModelProperty("性别 true男 false女")
privateBooleansex;
@ApiModelProperty("年龄")
privateIntegerage;
@ApiModelProperty("身高,单位米")
privateDoubleheight;
@ApiModelProperty("出生日期")
privateLocalDatebirthday;
@OverridepublicintcompareTo(Studentstudent) {
returnthis.age.compareTo(student.getAge());
    }
@OverridepublicStringtoString() {
returnString.format("%s\t\t%s\t\t%s\t\t%s\t\t%s",
this.name, this.sex.toString(), this.age.toString(), this.height.toString(), birthday.toString());
    }
/*** 打印学生信息的静态方法** @param studentList 学生信息列表*/publicstaticvoidprintStudentList(List<Student>studentList) {
System.out.println("【姓名】\t【性别】\t【年龄】\t\t【身高】\t\t【生日】");
System.out.println("-----------------------------------------------------");
studentList.forEach(s->System.out.println(s.toString()));
System.out.println(" ");
    }
}


二、添加测试数据

下面来添加一些测试用的数据,代码如下:

List<Student>studentList=newArrayList<>();
// 添加测试数据,请不要纠结数据的严谨性studentList.add(newStudent("张三", true, 18, 1.75, LocalDate.of(2005, 3, 26)));
studentList.add(newStudent("李四", false, 16, 1.67, LocalDate.of(2007, 8, 30)));
studentList.add(newStudent("王五", true, 23, 1.89, LocalDate.of(2000, 1, 16)));
studentList.add(newStudent("麻六", false, 27, 1.75, LocalDate.of(1996, 9, 20)));
studentList.add(newStudent("刘七", false, 30, 1.93, LocalDate.of(1993, 6, 19)));
studentList.add(newStudent("王八", false, 30, 1.75, LocalDate.of(1993, 6, 19)));

三、升序排序

使用年龄进行升序排序

// 排序之前结果输出Student.printStudentList(studentList);
// 按年龄排序(Integer类型)List<Student>ageAscList=studentList.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
// 排序之后结果输出(按年龄升序)Student.printStudentList(ageAscList);

结果如下图:

四、降序排序

使用年龄进行降序排序(使用 reversed() 方法)

// 降序排序// 排序之前结果输出Student.printStudentList(studentList);
List<Student>reversedList=studentList.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());
// 排序之后结果输出(按年龄降序)Student.printStudentList(reversedList);

结果如下图:

五、多字段排序

使用年龄进行降序排序,年龄相同再使用身高升序排序

// 多字段排序// 排序之前结果输出Student.printStudentList(studentList);
// 使用年龄进行降序排序,年龄相同再使用身高升序排序List<Student>ageHeightList=studentList.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Student::getHeight)).collect(Collectors.toList());
// 排序之后结果输出(按年龄降序)Student.printStudentList(ageHeightList);

结果如下图:


**本文首发于CSDN,为博主原创文章,如果需要转载,请注明出处,谢谢!**


本文完结!

相关文章
|
8月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
8月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
385 100
|
8月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
376 101
|
8月前
|
并行计算 Java 大数据
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
441 101
|
8月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
7月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
206 7
|
7月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
305 2
|
8月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
254 4
|
8月前
|
存储 数据可视化 Java
Java Stream API 的强大功能
Java Stream API 是 Java 8 引入的重要特性,它改变了集合数据的处理方式。通过声明式语法,开发者可以更简洁地进行过滤、映射、聚合等操作。Stream API 支持惰性求值和并行处理,提升了代码效率和可读性,是现代 Java 开发不可或缺的工具。
176 0
Java Stream API 的强大功能
|
9月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。

热门文章

最新文章