欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中如何給List進行排序(這7種方法輕松實現(xiàn))

 更新時間:2023年10月24日 08:54:08   作者:wljslmz  
在Java項目中可能會遇到給出一些條件,將List元素按照給定條件進行排序的情況,這篇文章主要給大家介紹了關于Java中如何給List進行排序的相關資料,通過文中介紹的這7種方法可以輕松實現(xiàn),需要的朋友可以參考下

前言

在Java中我們經常需要對 ArrayList、LinkedList 或 CopyOnWriteArrayList 等列表進行排序,在Java8出現(xiàn)之前,排序雖然能夠實現(xiàn),但是代碼寫起來不是很優(yōu)雅,而且性能上也沒有什么優(yōu)勢。Java 8 及其以后之后,引入了 Lambda 表達式和方法引用,可以根據不同的條件以不同的順序對對象列表進行排序,Comparator API 的增強功能也使 Java 中的對象比較和排序變得更加容易。

在本文,我將介紹如何使用 Lambda 表達式和方法引用對 ArrayList 等 List 進行排序,我將介紹7種方法,下面就直接進入代碼實戰(zhàn)。

在開始介紹前,我們先新建一個學生類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之前,沒有l(wèi)ambda表達式,一般都是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);
    }
}

打印結果:

如上代碼所示,成功使用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表達式結合靜態(tài)方法引用進行排序,所以需要在Student中增加靜態(tài)方法:

/**
 * 根據年齡對學生進行排序
 *
 * @param student1 學生1
 * @param student2 學生2
 * @return 數(shù)字
 */
public static int compareByAge(Student student1, Student student2) {
    return student1.getAge().compareTo(student2.getAge());
}
// 方法四:通過lambda表達式結合靜態(tài)方法引用
Collections.sort(studentList, Student::compareByAge);

打印結果:

如上代碼,我們先是在Student類中增加了compareByAge的靜態(tài)方法,然后結合lambda表達式成功進行了排序。

方法五

可以通過Comaprator的comparing()方法進行排序:

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

打印結果:

如上代碼,我們通過Comaprator的comparing()方法成功進行了排序。

方法六

可以通過以下代碼實現(xiàn)倒敘排序:

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

打印結果:

可以看到,我們成功的通過reversed()方法實現(xiàn)了倒序排序。

方法七

當排序條件非常多的時候應該怎么做?要善于使用lambda表達式:

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

打印結果:

可以看出,不管條件多么多,只要使用lambda表達式,結合if表達式靈活實現(xiàn)了列表多條件的排序功能。

總結

以上我介紹了7種列表排序的方法,在 Java 8 之前,我們使用 for-each 循環(huán)遍歷 List 并打印列表的每個內容,Java 8以后就可以使用forEach() 方法對于lambdas的應用非常實用。

從文中介紹的排序方法,可以看出在 Java 8 中使用 lambda 表達式對列表進行排序會使得代碼簡潔且富有表現(xiàn)力,希望大家在遇到排序場景的時候,多使用lambda 表達式。

到此這篇關于Java中如何給List進行排序的文章就介紹到這了,更多相關Java給List排序內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論