Sortieren ein Array von Objekten in Java

Rupam Yadav 12 Oktober 2023
  1. Verwendung von Comparable zum Sortieren von Arrays von Objekten in Java
  2. Verwenden von Lambda zum Sortieren eines Arrays von Objekten in Java
Sortieren ein Array von Objekten in Java

In diesem Tutorial lernen wir, wie man ein Array von Objekten mit der Schnittstelle Comparable und den Lambda-Funktionen in Java sortiert.

Verwendung von Comparable zum Sortieren von Arrays von Objekten in Java

Zur Bestellung benutzerdefinierter Objekte wird eine Comparable-Schnittstelle in Java verwendet. Hier implementiert die Klasse Student Comparable, sodass wir mit Arrays.sort() ein Array von Objekten der Klasse Student sortieren können.

Die Klasse Student hat drei Mitgliedsvariablen name, age und gender. Wir sortieren Elemente nur basierend auf diesen Datenelementen.

Die Comparable-Schnittstelle hat eine Methode, compareTo(). Wie wir im Beispiel sehen können, hat die Klasse Student diese Methode implementiert.

Die Methode compareTo() wird verwendet, um das aktuelle Objekt mit dem angegebenen Objekt zu sortieren und gibt eine positive ganze Zahl zurück, falls das aktuelle Objekt größer als das aktuelle Objekt ist. Wenn das aktuelle Objekt kleiner als das angegebene Objekt ist, wird eine negative ganze Zahl zurückgegeben; Wenn Null zurückgegeben wird, ist das aktuelle Objekt äquivalent zum angegebenen Objekt.

Wir haben ein Array der Klassenobjekte Student erstellt. Wir haben name, age und gender als Argumente übergeben, um sie mit dem Standardkonstruktor der Klasse zu initialisieren.

Das Array wird zuerst nach age und dann nach name geordnet, wie wir in der compareTo()-Methode der Student-Klasse sehen können. Wir übergeben das Array students an Arrays.sort().

Um das sortierte Array in unserem Format auszugeben, überschreiben wir die Methode toString() in der Klasse Student.

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));
  }
}

Ausgabe:

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

Verwenden von Lambda zum Sortieren eines Arrays von Objekten in Java

Das Sortieren eines Arrays von Objekten wird mit den Lambda-Funktionen in Java 8 einfach, ohne die Comparable-Schnittstelle zu implementieren.

Hier haben wir eine Benutzerklasse Books mit den Mitgliedsvariablen bookName und author. Der Standardkonstruktor initialisiert diese Datenmember.

Die Getter- und Setter-Methoden für den Zugriff auf diese Mitglieder sind ebenfalls in der Klasse Book definiert. Die List-Schnittstelle unterstützt die sort()-Methode.

Hier ist bookList die Instanz der Liste, die die Objekte der Klasse Books enthält. Der Lambda-Ausdruck zum Sortieren der Liste nach Autor lautet (Books a , Books b) -> a.getAuthor().compareTo(b.getAuthor()).

Die Methode sort() gibt die sortierte Liste zurück, und wir durchlaufen diese Liste und drucken jedes Element. Die sortierte Liste wird in der Ausgabe gedruckt.

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));
  }
}

Ausgabe:

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 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

Verwandter Artikel - Java Array

Verwandter Artikel - Java Object