在Java中如何给List进行排序?这7种方法都可以轻松实现!

这篇具有很好参考价值的文章主要介绍了在Java中如何给List进行排序?这7种方法都可以轻松实现!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你好,这里是Java架构历程,每天一个Java知识,愿我们每个Java开发者早日成为Java架构师,加油!

在Java中我们经常需要对 ArrayList、LinkedList 或 CopyOnWriteArrayList 等列表进行排序,在Java8出现之前,排序虽然能够实现,但是代码写起来不是很优雅,而且性能上也没有什么优势。Java 8 及其以后之后,引入了 Lambda 表达式和方法引用,可以根据不同的条件以不同的顺序对对象列表进行排序,Comparator API 的增强功能也使 Java 中的对象比较和排序变得更加容易。

在本文,我将介绍如何使用 Lambda 表达式和方法引用对 ArrayList 等 List 进行排序,我将介绍7种方法,下面就直接进入代码实战。

在开始介绍前,我们先新建一个学生类Student类,作为List中的对象:

Student:

package com.test.javaroads.java8sort;

import lombok.Data;

/**
 * @author: javaroads
 * @date: 2022/11/22 22:06
 * @description: 学生类
 */
@Data
@AllArgsConstructor
public class Student {

    /**
     * 学生ID
     */
    private String sid;

    /**
     * 学生姓名
     */
    private String name;

    /**
     * 学生年龄
     */
    private Integer age;

    /**
     * 性别
     */
    private String gender;

    /**
     * 所属班级
     */
    private String className;
}

如上代码,新建了Stdent类,属性有:学生ID(sid)、学生姓名(name)、学生年龄(age)、性别(gender)、所属班级(className)。

方法一

在Java8之前,没有lambda表达式,一般都是java.util包中的Collections.sort()方法,代码如下:

package com.test.javaroads.java8sort;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author: javaroads
 * @date: 2022/11/22 22:12
 * @description: 排序方法
 */
public class Sort {

    public static void main(String[] args) {
        List<Student> studentList = Arrays.asList(
                new Student("s1", "小李", 18, "女", "一班"),
                new Student("s2", "小王", 20, "男", "三班"),
                new Student("s3", "小张", 19, "男", "四班"),
                new Student("s4", "小汪", 19, "男", "二班"));

        System.out.println("排序前");
        studentList.forEach(System.out::println);

        // 方法一:Java8之前,不用lambda表达式
        Collections.sort(studentList, new Comparator<Student>() {
            @Override
            public int compare(Student student1, Student student2) {
                return student1.getAge() - student2.getAge();
            }
        });

        // 用forEach打印出排序后的list
        System.out.println("排序后的list:");
        studentList.forEach(System.out::println);
    }
}

打印结果:

java list 排序方法,java,java,list,python

如上代码所示,成功使用Collections.sort()方法将学生列表根据年龄排好序了。

方法二

在Java8中,可以利用lambda表达式进行排序:

// 方法二:Java8中使用lambda表达式
Collections.sort(studentList, (student1, student2) -> student1.getClassName().compareTo(student2.getClassName()));

打印结果:

java list 排序方法,java,java,list,python

如上代码所示,成功使用Collections.sort(studentList, (student1, student2) -> student1.getClassName().compareTo(student2.getClassName()));lambda表达式将学生列表根据班级排好序了。

方法三

可以使用类型推断增强lambda表达式,代码如下:

// 方法三:通过类型推断增强lambda表达式
Collections.sort(studentList, (student1, student2) -> student1.getAge() - student2.getAge());

打印结果:

java list 排序方法,java,java,list,python

如上代码所示,通过类型推断增强lambda表达式将学生列表根据学生年龄排好序了。

方法四

可以通过lambda表达式结合静态方法引用进行排序,所以需要在Student中增加静态方法:

/**
 * 根据年龄对学生进行排序
 *
 * @param student1 学生1
 * @param student2 学生2
 * @return 数字
 */
public static int compareByAge(Student student1, Student student2) {
    return student1.getAge().compareTo(student2.getAge());
}
// 方法四:通过lambda表达式结合静态方法引用
Collections.sort(studentList, Student::compareByAge);

打印结果:

java list 排序方法,java,java,list,python

如上代码,我们先是在Student类中增加了compareByAge的静态方法,然后结合lambda表达式成功进行了排序。

方法五

可以通过Comaprator的comparing()方法进行排序:

// 方法五:通过使用Comaprator的comparing()方法
Collections.sort(studentList, Comparator.comparing(Student::getAge));

打印结果:

java list 排序方法,java,java,list,python

如上代码,我们通过Comaprator的comparing()方法成功进行了排序。

方法六

可以通过以下代码实现倒叙排序:

// 方法六:lambda倒叙
Comparator<Student> compare = (student1, student2) -> student1.getAge() - student2.getAge();
Collections.sort(studentList, compare.reversed());

打印结果:

java list 排序方法,java,java,list,python

可以看到,我们成功的通过reversed()方法实现了倒序排序。

方法七

当排序条件非常多的时候应该怎么做?要善于使用lambda表达式:

// 方法七:多条件排序
Collections.sort(studentList, (student1, student2) -> {
    if (student1.getGender().equals(student2.getGender())) {
        return student1.getAge() - student2.getAge();
    } else {
        return student1.getClassName().compareTo(student2.getClassName());
    }
});

打印结果:

java list 排序方法,java,java,list,python

可以看出,不管条件多么多,只要使用lambda表达式,结合if表达式灵活实现了列表多条件的排序功能。

总结

以上我介绍了7种列表排序的方法,在 Java 8 之前,我们使用 for-each 循环遍历 List 并打印列表的每个内容,Java 8以后就可以使用forEach() 方法对于lambdas的应用非常实用。

从文中介绍的排序方法,可以看出在 Java 8 中使用 lambda 表达式对列表进行排序会使得代码简洁且富有表现力,希望大家在遇到排序场景的时候,多使用lambda 表达式。

最后感谢您的阅读,希望本文对您有所帮助,有任何问题都可以在下方评论区与我讨论!文章来源地址https://www.toymoban.com/news/detail-719829.html

到了这里,关于在Java中如何给List进行排序?这7种方法都可以轻松实现!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中List排序的4种方法

    开发过程中经常会遇到读取文件内容的情况,需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况。 我们可以通过 java.io.File 类包找出文件是目录还是常规文件。java.io.File 类包含两种方法,它们分别是: isFile():如果文件存在并且是常规文件,

    2024年02月12日
    浏览(25)
  • Java中List排序的3种方法

    在某些特殊的场景下,我们需要在 Java 程序中对 List 集合进行排序操作。比如从第三方接口中获取所有用户的列表,但列表默认是以用户编号从小到大进行排序的,而我们的系统需要按照用户的年龄从大到小进行排序,这个时候,我们就需要对 List 集合进行自定义排序操作了

    2024年02月03日
    浏览(25)
  • 使用java8 新特性stream流对List<Map<String, Object>>集合进行遍历、过滤、查询、去重、排序、分组

    对于一个ListMapString, Object类型的数据,可以使用Java 8的新特性stream流来进行遍历、过滤、查询、去重、排序、分组等操作。 遍历: 过滤: 查询: 去重: 排序: 分组:

    2024年02月10日
    浏览(47)
  • Java 中如何对集合进行排序

    在 Java 中,集合是一种非常常见的数据结构,它可以用来存储一组元素,而且可以动态地增加或删除元素。在实际的开发中,我们经常需要对集合中的元素进行排序,以便更方便地查找、比较和操作集合中的数据。本文将介绍 Java 中如何对集合进行排序。 在 Java 中,集合是一

    2024年01月21日
    浏览(27)
  • java通用实现List<自定义对象>中指定字段和指定排序方式

    Person类: 工具类: 结果:

    2024年02月04日
    浏览(33)
  • 使用Java的stream().sorted方法对集合进行排序

    Java Stream API 提供了丰富的方法来对流中的元素进行处理和操作。其中, sorted() 方法用于对流中的元素进行排序。本文将深入探讨 sorted() 方法的用法、示例代码以及详细解释,以帮助您更好地理解和使用这个方法。 StreamT sorted() : 这个方法用于对流中的元素进行自然排序。要

    2024年02月04日
    浏览(45)
  • 再JAVA中如何使用qsort对类进行排序?

    目录 结论:  解析:    我们知道当我们定义了一个整型数组然后想对其进行排序时就 可以使用 Arrays.toString() 方法对数组进行排序,系统会默认将其按照升序排列。   当我们需要对类进行排序应该怎么做呢? 首先我们先定义一个类:  我们现在有了这个类之后就可以对他

    2024年02月11日
    浏览(27)
  • 用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

      目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 冒泡排序是众多排序的一种,无论在C语言或者Java中都很常见,后续在数据结构中也会用到 1.冒泡排序介绍 (1)冒泡排

    2024年02月05日
    浏览(36)
  • Java如何解决高并发的问题? 可以试试这些方法

    大家好,我是小武,一个工作10年的程序员,就职于鹅厂,平时喜欢搞搞副业。 在工作中,我们经常会遇到高并发的问题,这个是很常见的,只要用户访问量一多的情况下,那么我们的网站就会变慢,有什么好的解决方法呢?     1. 多线程: Java支持多线程编程,通过使用多

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包