Java开发中List排序的7种方法详解
近期有些网友想要了解Java开发中List排序的7种方法详解的相关情况,小编通过整理给您分析,同时介绍一下有关信息。
在Java开发过程中,对集合中的元素进行排序是一项常见的操作。特别是在处理大量数据时,高效的排序算法能够显著提升程序性能。随着Java8的发布,引入了Lambda表达式和方法引用,使得排序操作变得更加简洁和直观。本文将详细介绍在Java中对List进行排序的7种方法,从传统的Collections.sort()到现代的Lambda表达式和方法引用,帮助开发者掌握各种排序技巧,提高编程效率。
前言
在Java中我们经常需要对 ArrayList、LinkedList 或 CopyOnWriteArrayList 等列表进行排序,在Java8出现之前,排序虽然能够实现,但是代码写起来不是很优雅,而且性能上也没有什么优势。Java 8 及其以后之后,引入了 Lambda 表达式和方法引用,可以根据不同的条件以不同的顺序对对象列表进行排序,Comparator API 的增强功能也使 Java 中的对象比较和排序变得更加容易。
在本文,我将介绍如何使用 Lambda 表达式和方法引用对 ArrayList 等 List 进行排序,我将介绍7种方法,下面就直接进入代码实战。
在开始介绍前,我们先新建一个学生类Student类,作为List中的对象:
Student:
packagecom.test.javaroads.java8sort; importlombok.Data; /** *@author:javaroads *@date:2022/11/2222:06 *@description:学生类 */ @Data @AllArgsConstructor publicclassStudent{ /** *学生ID */ privateStringsid; /** *学生姓名 */ privateStringname; /** *学生年龄 */ privateIntegerage; /** *性别 */ privateStringgender; /** *所属班级 */ privateStringclassName; }
如上代码,新建了Stdent类,属性有:学生ID(sid)、学生姓名(name)、学生年龄(age)、性别(gender)、所属班级(className)。
方法一
在Java8之前,没有lambda表达式,一般都是java.util包中的Collections.sort()
方法,代码如下:
packagecom.test.javaroads.java8sort; importjava.util.Arrays; importjava.util.Collections; importjava.util.Comparator; importjava.util.List; importjava.util.stream.Collectors; /** *@author:javaroads *@date:2022/11/2222:12 *@description:排序方法 */ publicclassSort{ publicstaticvoidmain(String[]args){ ListstudentList=Arrays.asList( newStudent("s1","小李",18,"女","一班"), newStudent("s2","小王",20,"男","三班"), newStudent("s3","小张",19,"男","四班"), newStudent("s4","小汪",19,"男","二班")); System.out.println("排序前"); studentList.forEach(System.out::println); //方法一:Java8之前,不用lambda表达式 Collections.sort(studentList,newComparator (){ @Override publicintcompare(Studentstudent1,Studentstudent2){ returnstudent1.getAge()-student2.getAge(); } }); //用forEach打印出排序后的list System.out.println("排序后的list:"); studentList.forEach(System.out::println); } }
打印结果:
如上代码所示,成功使用Collections.sort()
方法将学生列表根据年龄排好序了。
方法二
在Java8中,可以利用lambda表达式进行排序:
//方法二:Java8中使用lambda表达式 Collections.sort(studentList,(student1,student2)->student1.getClassName().compareTo(student2.getClassName()));
打印结果:
如上代码所示,成功使用Collections.sort(studentList, (student1, student2) -> student1.getClassName().compareTo(student2.getClassName()));
lambda表达式将学生列表根据班级排好序了。
方法三
可以使用类型推断增强lambda表达式,代码如下:
//方法三:通过类型推断增强lambda表达式 Collections.sort(studentList,(student1,student2)->student1.getAge()-student2.getAge());
打印结果:
如上代码所示,通过类型推断增强lambda表达式将学生列表根据学生年龄排好序了。
方法四
可以通过lambda表达式结合静态方法引用进行排序,所以需要在Student中增加静态方法:
/** *根据年龄对学生进行排序 * *@paramstudent1学生1 *@paramstudent2学生2 *@return数字 */ publicstaticintcompareByAge(Studentstudent1,Studentstudent2){ returnstudent1.getAge().compareTo(student2.getAge()); }
//方法四:通过lambda表达式结合静态方法引用 Collections.sort(studentList,Student::compareByAge);
打印结果:
如上代码,我们先是在Student类中增加了compareByAge的静态方法,然后结合lambda表达式成功进行了排序。
方法五
可以通过Comaprator的comparing()方法进行排序:
//方法五:通过使用Comaprator的comparing()方法 Collections.sort(studentList,Comparator.comparing(Student::getAge));
打印结果:
如上代码,我们通过Comaprator的comparing()方法成功进行了排序。
方法六
可以通过以下代码实现倒叙排序:
//方法六:lambda倒叙 Comparatorcompare=(student1,student2)->student1.getAge()-student2.getAge(); Collections.sort(studentList,compare.reversed());
打印结果:
可以看到,我们成功的通过reversed()方法实现了倒序排序。
方法七
当排序条件非常多的时候应该怎么做?要善于使用lambda表达式:
//方法七:多条件排序 Collections.sort(studentList,(student1,student2)->{ if(student1.getGender().equals(student2.getGender())){ returnstudent1.getAge()-student2.getAge(); }else{ returnstudent1.getClassName().compareTo(student2.getClassName()); } });
打印结果:
可以看出,不管条件多么多,只要使用lambda表达式,结合if表达式灵活实现了列表多条件的排序功能。
总结
通过对Java中List排序的7种方法的详细讲解,我们可以看到,Java8引入的Lambda表达式和方法引用极大地简化了排序操作。无论是单条件排序还是多条件排序,都可以通过简洁的代码实现。这些方法不仅提高了代码的可读性,还增强了程序的灵活性和扩展性。掌握这些排序技巧,将有助于开发者在实际项目中更高效地处理数据,提升整体开发效率。希望本文的内容能为广大Java开发者提供有价值的参考和帮助。
推荐阅读
-
基于PyQt5的HTTP接口测试工具开发实战
-
Java中的URL编码(URLDecoder)与解码(URLEncoder)使用详解
-
Mysql修改root密码的四种方法详解
-
JavaScript中保留两位小数的多种实现方法
-
PHP调用API接口详解:从基础到实践
-
Python中使用PyYAML库来读取、解析和处理YAML文件的方法
近期有些网友想要了解Python中使用PyYAML库来读取、解析和处理YAML文件的方法的相关情况,小编通过整理给您分析,同时介绍...
-
使用Python中的BeautifulSoup (bs4) 解析复杂HTML内容的技巧与示例
-
Microsoft SQL Server 2012 数据库安装图文教程
-
PHP获取本机ip地址实例代码详解
-
C#使用iTextSharp库将图片转换为PDF的步骤及实例代码解析