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 | Sectie
Practice
Projects
Quizzes & Challenges
Quizzen
Challenges
/
Stream-API in Java

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 kan het wenselijk zijn om deze te 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, je wilt Book-objecten vergelijken op basis van hun publicatiejaar.

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

Hiermee kan de volgorde waarin boeken worden gesorteerd worden bepaald—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 klasse compareTo 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 zijn geordend 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.

Sectie 1. Hoofdstuk 8
some-alt