Sortieren Sie eine Sammlung mit mehreren Feldern in Kotlin
- Generieren Sie ein Kotlin-Projekt
- Sammlung nach individuellen Eigenschaften sortieren
- Sammlung mit mehreren Eigenschaften sortieren
- Abschluss
Die Kotlin-Bibliothek bietet verschiedene Möglichkeiten, die der Entwickler je nach Anforderung nutzen kann. In diesem Tutorial erfahren Sie, wie Sie eine Sammlung mit einzelnen und mehreren Feldern sortieren.
Generieren Sie ein Kotlin-Projekt
Öffnen Sie die IntelliJ-Entwicklungsumgebung und wählen Sie Datei > Neu > Projekt
. Geben Sie den Projektnamen als kotlin-sortby
ein, wählen Sie Kotlin
im Sprachabschnitt und wählen Sie Intellij
im Abschnitt System erstellen
.
Drücken Sie zuletzt die Schaltfläche Erstellen
, um das Projekt zu generieren. Erstellen Sie eine Datei namens Main.kt
im Ordner src/main/kotlin
und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.
Code:
import java.time.Year
data class Book(val id: Int,
val name: String,
val yearPublished: Year)
fun fetchBooks(): ArrayList<Book>{
return arrayListOf(
Book(1,"Java Arrays", Year.of(1984)),
Book(2,"Python Arrays",Year.of(2021)),
Book(3,"Pascal for loop",Year.of(2022)),
Book(4,"Pascal Arrays",Year.of(2021)),
Book(5,"Java for loop",Year.of(2022))
)
}
In diesem Code haben wir eine Methode namens fetchBooks()
erstellt, die eine Liste
von Buchobjekten zurückgibt, die mit der Datenklasse Book
erstellt wurden. Wir verwenden diese Liste in unseren Beispielen, um zu sehen, wie wir die Bücher nach verschiedenen Kriterien sortieren können.
Sammlung nach individuellen Eigenschaften sortieren
Kopieren Sie die folgenden Beispielcodes und fügen Sie sie nach der Methode fetchBooks()
in die Datei Main.kt
ein.
Verwenden Sie die sortBy()
-Methode, um eine Sammlung zu sortieren
Im folgenden Beispiel erstellen wir eine Methode namens usingSortBy()
, die die Methode sortBy()
verwendet, um unsere zuvor erstellte Liste mit dem Feld yearPublished
zu sortieren.
Die Methode sortBy()
ist eine Erweiterungsfunktion der MutableList
und liefert keinen Wert zurück. Die Funktion hat ein Schlüsselwort crossinline
vor der Selektorfunktion, die darauf angewendet wird, was bedeutet, dass die Selektorfunktion keine nicht-lokalen Rückgaben zulässt.
Beachten Sie, dass die Selektor-Funktion hinter den Kulissen die Schnittstelle Vergleichbar
verwendet, um die Elemente in der Liste zu sortieren.
Code:
fun usingSortBy(){
val books = fetchBooks()
books.sortBy(Book::yearPublished)
books.forEach(::println);
}
fun main(){
usingSortBy();
}
Ausgang:
Book(id=1, name=Java Arrays, yearPublished=1984)
Book(id=2, name=Python Arrays, yearPublished=2021)
Book(id=4, name=Pascal Arrays, yearPublished=2021)
Book(id=3, name=Pascal for loop, yearPublished=2022)
Book(id=5, name=Java for loop, yearPublished=2022)
Verwenden Sie die sortedBy()
-Methode, um eine Sammlung zu sortieren
Das Collections-Framework bietet eine Alternative zur sortBy()
-Methode, die es uns ermöglicht, eine neue Liste zurückzugeben, die wir in diesem Beispiel nicht erhalten konnten. Wir können die Methode sortedBy()
verwenden, eine Erweiterungsfunktion der Schnittstelle Iterable
.
Code:
fun usingSortedBy(){
fetchBooks().sortedBy(Book::yearPublished)
.forEach(::println);
}
fun main(){
usingSortedBy();
}
Ausgang:
Book(id=1, name=Java Arrays, yearPublished=1984)
Book(id=2, name=Python Arrays, yearPublished=2021)
Book(id=4, name=Pascal Arrays, yearPublished=2021)
Book(id=3, name=Pascal for loop, yearPublished=2022)
Book(id=5, name=Java for loop, yearPublished=2022)
Die Methode sortedBy()
gibt eine Liste zurück, die die Elemente enthält, die mit der Selektorfunktion sortiert wurden, und wir können die Methode forEach()
für die zurückgegebene Liste aufrufen, um die Objekte in der Konsole zu protokollieren.
Sammlung mit mehreren Eigenschaften sortieren
Wir haben in den vorherigen Beispielen gesehen, wie Elemente mithilfe eines einzelnen Felds sortiert werden. Es gibt jedoch Situationen, in denen der Client möglicherweise basierend auf mehreren Feldern in einer Anwendung sortieren möchte.
In diesem Abschnitt erfahren Sie, wie Sie diese Funktionalität realisieren.
Verwenden Sie die sortWith()
-Methode, um eine Sammlung zu sortieren
In diesem Beispiel haben wir eine Methode namens usingSortWith()
erstellt, die die Methode sortWith()
verwendet, um unsere Liste nach dem Namen
des Buchs gefolgt vom Jahr
des Buchs zu sortieren.
Die Methode sortWith()
ist eine Erweiterungsfunktion der MutableList
und akzeptiert jedes Argument, das einen Comparator
zurückgibt. Beachten Sie, dass diese Methode keinen Wert zurückgibt.
Code:
fun usingSortWith(){
val books = fetchBooks();
books.sortWith(compareBy(Book::name, Book::yearPublished));
books.forEach(::println);
}
fun main(){
usingSortWith();
}
Wir haben die Methode compareBy()
als Argument für die Methode sortWith()
verwendet. Die Methode compareBy()
gibt einen Comparator
zurück und kann mit mehr als einer Selektorfunktion überladen werden, um die Liste nach verschiedenen Eigenschaften zu sortieren.
Das vor der Selektorfunktionsdefinition hinzugefügte Schlüsselwort vararg
zeigt an, dass wir mehr als ein Argument übergeben können.
Ausgang:
Book(id=1, name=Java Arrays, yearPublished=1984)
Book(id=5, name=Java for loop, yearPublished=2022)
Book(id=4, name=Pascal Arrays, yearPublished=2021)
Book(id=3, name=Pascal for loop, yearPublished=2022)
Book(id=2, name=Python Arrays, yearPublished=2021)
Verwenden Sie die sortedWith()
-Methode, um eine Sammlung zu sortieren
Das Sammlungs-Framework bietet eine Alternative zur sortWith()
-Methode, die es uns ermöglicht, eine neue Liste mit den sortierten Elementen zurückzugeben. Wir können die Methode sortedWith()
verwenden, um diese Funktionalität zu realisieren.
Die Methode sortedWith()
ist eine Erweiterungsfunktion der Schnittstelle Iterable
und akzeptiert jedes Argument, das einen Comparator
zurückgibt.
Code:
fun usingSortedWith(){
fetchBooks().sortedWith(compareBy(Book::name, Book::yearPublished))
.forEach(::println);
}
fun main(){
usingSortedWith();
}
Wir haben den compareBy()
verwendet, der einen Comparator
zurückgibt, wie wir es im vorherigen Beispiel getan haben, und ihn überladen, um die Liste nach Name und Jahr zu sortieren.
Ausgang:
Book(id=1, name=Java Arrays, yearPublished=1984)
Book(id=5, name=Java for loop, yearPublished=2022)
Book(id=4, name=Pascal Arrays, yearPublished=2021)
Book(id=3, name=Pascal for loop, yearPublished=2022)
Book(id=2, name=Python Arrays, yearPublished=2021)
Abschluss
In diesem Lernprogramm haben wir verschiedene Möglichkeiten kennengelernt, mit denen wir eine Liste nach gewünschten Kriterien sortieren können. Zu den Ansätzen, die wir behandelt haben, gehören die Verwendung der Methode sortBy()
, die Verwendung der Methode sortedBy()
, die Verwendung der Methode sortWith()
und die Verwendung der Methode sortedWith()
.
Beachten Sie, dass die anderen beiden Sortierstrategien es uns ermöglichen, eine Liste in absteigender Reihenfolge zu sortieren, und sie beinhalten sortByDescending()
und sortedByDescending()
.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub