Java でオブジェクトの配列を並べ替える

Rupam Yadav 2023年10月12日
  1. Java で Comparable を使ってオブジェクトの配列をソートする
  2. Java でオブジェクトの配列をソートするためのラムダの使用
Java でオブジェクトの配列を並べ替える

このチュートリアルでは、Java の Comparable インターフェースと Lambda 関数を使用してオブジェクトの配列をソートする方法を学習します。

Java で Comparable を使ってオブジェクトの配列をソートする

Java の Comparable インターフェイスは、ユーザー定義オブジェクトを注文するために使用されます。ここで、Student クラスは Comparable を実装しているため、Arrays.sort() を使用して Student クラスオブジェクトの配列を並べ替えることができます。

Student クラスには、nameage、および gender の 3つのメンバー変数があります。これらのデータメンバーのみに基づいて要素を並べ替えます。

Comparable インターフェースには、compareTo() という 1つのメソッドがあります。例でわかるように、Student クラスはこのメソッドを実装しています。

compareTo() メソッドは、現在のオブジェクトを指定されたオブジェクトでソートするために使用され、現在のオブジェクトが現在のオブジェクトよりも大きい場合は正の整数を返します。現在のオブジェクトが指定されたオブジェクトよりも小さい場合、負の整数を返します。ゼロが返された場合、現在のオブジェクトは指定されたオブジェクトと同等です。

Student クラスオブジェクトの配列を作成しました。nameage、および gender を引数として渡して、クラスのデフォルトコンストラクターを使用してそれらを初期化しました。

Student クラスの compareTo() メソッドでわかるように、配列は最初に age、次に name の順に並べられます。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}]

Java でオブジェクトの配列をソートするためのラムダの使用

オブジェクトの配列のソートは、Comparable インターフェースを実装しなくても、Java 8 の Lambda 関数を使用すると簡単になります。

ここには、メンバー変数 bookNameauthor を持つ Books ユーザークラスがあります。デフォルトのコンストラクターは、これらのデータメンバーを初期化します。

これらのメンバーにアクセスするための getter メソッドと setter メソッドも、Book クラスで定義されています。List インターフェースは sort() メソッドをサポートします。

ここで、bookListBooks クラスオブジェクトを含むリストのインスタンスです。リストを作成者で並べ替えるラムダ式は、(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