在 Java 中對物件陣列進行排序

Rupam Yadav 2023年1月30日 2022年4月27日
  1. 在 Java 中使用 Comparable 對物件陣列進行排序
  2. 使用 Lambda 對 Java 中的物件陣列進行排序
在 Java 中對物件陣列進行排序

在本教程中,我們將學習如何使用 Java 中的 Comparable 介面和 Lambda 函式對物件陣列進行排序。

在 Java 中使用 Comparable 對物件陣列進行排序

Java 中的 Comparable 介面用於對使用者定義的物件進行排序。在這裡,Student 類實現了 Comparable,因此我們可以使用 Arrays.sort()Student 類物件的陣列進行排序。

Student 類具有三個成員變數 nameagegender。我們僅根據這些資料成員對元素進行排序。

Comparable 介面有一個方法,compareTo()。正如我們在示例中看到的,Student 類已經實現了這個方法。

compareTo() 方法用於將當前物件與指定物件進行排序,如果當前物件大於當前物件,則返回一個正整數。當前物件小於指定物件時,返回負整數;如果返回零,則當前物件等價於指定物件。

我們建立了一個 Student 類物件的陣列。我們將 nameagegender 作為引數傳遞,以使用類的預設建構函式初始化它們。

陣列首先按 age 排序,然後是 name,正如我們在 Student 類的 compareTo() 方法中看到的那樣。我們將 students 陣列傳遞給 Arrays.sort()

為了以我們的格式列印排序後的陣列,我們重寫了 Student 類中的 toString() 方法。

import java.util.Arrays;

class Student implements Comparable<Student> {
    private String name;
    private int age;
    private String gender;

    public Student (String name, int age, String gender){
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    @Override
    public String toString()
    {
        return "{" + "name='" + name + '\'' +", gender: "+gender+", "+
                "age=" + age + '}';
    }
    public int getAge() {
        return age;
    }

    public String getGender() {
        return gender;
    }

    public String getName() {
        return name;
    }

    @Override
    public int compareTo(Student o) {
        if (this.age != o.getAge()) {
            return this.age - o.getAge();
        }
        return this.name.compareTo(o.getName());
    }
}

public class TestExample {
    public static void main(String [] args){
        Student[] students = { new Student("Jack", 25,"male"), new Student("Sandy", 20,"female"),
                new Student("Danny", 22,"male"), new Student("Zoey", 10,"female") };

        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
    }
}

輸出:

[{name='Zoey', gender: female, age=10}, {name='Sandy', gender: female, age=20}, {name='Danny', gender: male, age=22}, {name='Jack', gender: male, age=25}]

使用 Lambda 對 Java 中的物件陣列進行排序

使用 Java 8 中的 Lambda 函式對物件陣列進行排序變得很容易,而無需實現 Comparable 介面。

在這裡,我們有一個帶有成員變數 bookNameauthorBooks 使用者類。預設建構函式初始化這些資料成員。

訪問這些成員的 getter 和 setter 方法也在 Book 類中定義。List 介面支援 sort() 方法。

這裡,bookList 是包含 Books 類物件的列表例項。按作者對列表進行排序的 lambda 表示式是 (Books a , Books b) -> a.getAuthor().compareTo(b.getAuthor())

sort() 方法返回排序後的列表,我們遍歷該列表並列印每個元素。排序後的列表列印在輸出中。

import java.util.ArrayList;
import java.util.List;

class Books {
    String bookName;
    String author;
    public Books(String bookName,String author){
        this.bookName = bookName;
        this.author = author;
    }

    @Override
    public String toString()
    {
        return "{" + "Book ='" + bookName + '\''+
                ", author = '" + author + '\'' +"}";
    }

    public String getAuthor() {
        return author;
    }

    public String getBookName() {
        return bookName;
    }
}
public class ExampleObjectSort {
    public static void main(String [] args){

        List<Books> bookList = new ArrayList<>();
        bookList.add(new Books( "Barney's Version","Mordecai Richler" ));
        bookList.add(new Books( "The Unsettlers","Mark Sundeen" ));
        bookList.add(new Books( "The Debt to Pleasure","John Lanchester" ));
        bookList.add(new Books( "How to Do Nothing","Jenny Odell" ));

        System.out.println("Before Sorting");
        bookList.forEach((s)->System.out.println(s));
        System.out.println("");
        System.out.println("Sorted Books by author Using Lambda.");
        bookList.sort((Books a , Books b) -> a.getAuthor().compareTo(b.getAuthor()));
        bookList.forEach((s)->System.out.println(s));

    }
}

輸出:

Before Sorting
{Book ='Barney's Version', author = 'Mordecai Richler'}
{Book ='The Unsettlers', author = 'Mark Sundeen'}
{Book ='The Debt to Pleasure', author = 'John Lanchester'}
{Book ='How to Do Nothing', author = 'Jenny Odell'}

Sorted Books by author Using Lambda.
{Book ='How to Do Nothing', author = 'Jenny Odell'}
{Book ='The Debt to Pleasure', author = 'John Lanchester'}
{Book ='The Unsettlers', author = 'Mark Sundeen'}
{Book ='Barney's Version', author = 'Mordecai Richler'}
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Array

相關文章 - Java Object