在 Java 中对对象数组进行排序

Rupam Yadav 2023年10月12日
  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'}
作者: 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