Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Comparable: Natuurlijke Ordening van Gegevens | Fundamenten en Functionele Mogelijkheden van Stream API
Stream-API

bookComparable: Natuurlijke Ordening van Gegevens

In Java is het gebruikelijk om objecten te sorteren. Bijvoorbeeld, in een lijst van boeken kun je ze willen sorteren op titel, auteur of publicatiejaar.

Om dergelijke taken uit te voeren, biedt Java de interfaces Comparable en Comparator. Beide bereiken hetzelfde doel (objecten sorteren), maar doen dit op verschillende manieren. Laten we ze één voor één bekijken.

Wat is Comparable?

Java strings worden bijvoorbeeld standaard alfabetisch gesorteerd omdat de klasse String de interface Comparable implementeert.

De belangrijkste methode in de Comparable functionele interface is:

int compareTo(T o);

Deze methode retourneert:

  • Een negatief getal als het huidige object kleiner is dan het opgegeven object;
  • Nul als de objecten gelijk zijn;
  • Een positief getal als het huidige object groter is dan het opgegeven object.

Voorbeeld: Boeken sorteren op jaar

Stel dat je Book-objecten wilt vergelijken op basis van hun publicatiejaar.

Om dit te bereiken kan de Book-klasse Comparable implementeren en de compareTo-methode overschrijven. Door deze methode te overschrijven, definieer je hoe Book-objecten vergeleken moeten worden, wat direct invloed heeft op het sorteergedrag in methoden zoals Collections.sort().

Hiermee kun je bepalen in welke volgorde boeken gesorteerd worden—of dit nu oplopend of aflopend is—afhankelijk van de logica die je in compareTo implementeert.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344
package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }

Wanneer Collections.sort(books) wordt aangeroepen, itereert Java door de lijst en vergelijkt elementen met behulp van de in de compareTo-klasse gedefinieerde Book-methode.

Voor elke vergelijking retourneert compareTo een numerieke waarde die de volgorde van twee boeken bepaalt. Op basis van deze waarden herschikt het sorteeralgoritme de elementen zodat ze geordend zijn op oplopend publicatiejaar.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 8

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 2.33

bookComparable: Natuurlijke Ordening van Gegevens

Veeg om het menu te tonen

In Java is het gebruikelijk om objecten te sorteren. Bijvoorbeeld, in een lijst van boeken kun je ze willen sorteren op titel, auteur of publicatiejaar.

Om dergelijke taken uit te voeren, biedt Java de interfaces Comparable en Comparator. Beide bereiken hetzelfde doel (objecten sorteren), maar doen dit op verschillende manieren. Laten we ze één voor één bekijken.

Wat is Comparable?

Java strings worden bijvoorbeeld standaard alfabetisch gesorteerd omdat de klasse String de interface Comparable implementeert.

De belangrijkste methode in de Comparable functionele interface is:

int compareTo(T o);

Deze methode retourneert:

  • Een negatief getal als het huidige object kleiner is dan het opgegeven object;
  • Nul als de objecten gelijk zijn;
  • Een positief getal als het huidige object groter is dan het opgegeven object.

Voorbeeld: Boeken sorteren op jaar

Stel dat je Book-objecten wilt vergelijken op basis van hun publicatiejaar.

Om dit te bereiken kan de Book-klasse Comparable implementeren en de compareTo-methode overschrijven. Door deze methode te overschrijven, definieer je hoe Book-objecten vergeleken moeten worden, wat direct invloed heeft op het sorteergedrag in methoden zoals Collections.sort().

Hiermee kun je bepalen in welke volgorde boeken gesorteerd worden—of dit nu oplopend of aflopend is—afhankelijk van de logica die je in compareTo implementeert.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344
package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }

Wanneer Collections.sort(books) wordt aangeroepen, itereert Java door de lijst en vergelijkt elementen met behulp van de in de compareTo-klasse gedefinieerde Book-methode.

Voor elke vergelijking retourneert compareTo een numerieke waarde die de volgorde van twee boeken bepaalt. Op basis van deze waarden herschikt het sorteeralgoritme de elementen zodat ze geordend zijn op oplopend publicatiejaar.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 8
some-alt