In de laatste tutorial hebben we gezien hoe we objecten van een aangepaste klasse kunnen sorteren met behulp van de vergelijkbare interface. Door Comparable te gebruiken, kunnen we de objecten sorteren op basis van elk gegevenslid. Laten we bijvoorbeeld zeggen dat we een Author
klasse hebben die gegevensleden heeft: Naam van de auteur, boeknaam en leeftijd van de auteur, nu als we de objecten op een van de gegevensleden willen sorteren, kunnen we Vergelijkbaar gebruiken, maar wat als we willen meerdere sorteerkeuzes en we kunnen objecten sorteren op basis van elke keuze , dit kan met behulp van de Comparator-interface, we kunnen zoveel Comparator maken als we willen en dan kunnen we Collections.sort op een of meer Comparator als volgt aanroepen:
// Sorteerarraylist al op auteur Age Collections.sort (al, nieuwe AuthorAgeComparator ()); // Ranglijst sorteren op boeknaam Collections.sort (al, nieuwe BookNameComparator ());
Dus hoe werkt het? Om de methode Collections.sort op deze manier aan te roepen, moeten we eerst deze Comparator-klassen AuthorAgeComparator en BookNameComparator schrijven, samen met de klasse Author en de hoofdklasse.
Compleet vergelijkingsvoorbeeld
Author.java
public class Author implementeert Vergelijkbare <Author> { String voornaam;String bookName;int auAge;Auteur (String eerst, Stringboek, int leeftijd) { this.firstName = first; this.bookName = boek; this.auAge = leeftijd;}public String getFirstName () { geef voornaam terug;} public void setFirstName (String firstName) { this.firstName = firstName;} public String getBookName () { terug bookName;} public void setBookName (String bookName) { this.bookName = bookName;} public int getAuAge () { retour auAge;} public void setAuAge (int auAge) { this.auAge = auAge;}@ Override/ * * Wanneer we alleen Comparable gebruiken, schrijven we hier sortering* logica. Deze methode wordt genoemd wanneer we Comparable implementeren* interface in onze klasse en roep Collections.sort () op* /public int CompareTo (Author au) { retourneer this.firstName.compareTo (au.firstName); } }
AuthorAgeComparator.java
import java.util. *; class AuthorAgeComparator implementeert Comparator <Author> {public int Compare (Auteur a1, Auteur a2) { if (== a1.auAge a2.auAge)terugkeer 0;anders if (a1.auAge> a2.auAge)terugkeer 1;andersrendement -1; } }
BookNameComparator.java
import java.util. *; openbare klasse BookNameComparator implementeert Comparator <Author> {public int Compare (Auteur a1, Auteur a2) { retourneer a1.bookName.compareTo (a2.bookName);} }
SortingPgm.java
java.util.ArrayList importeren; import java.util.Collections; public class SortingPgm { public static void main (String args []) { // Lijst met objecten van auteursklasse ArrayList <Author> al = new ArrayList <Author> (); al.add (nieuwe auteur ("Henry", "Tropic of Cancer", 45)); al.add (nieuwe auteur ("Nalo", "Brown Girl in the Ring", 56)); al.add (nieuwe auteur ("Frank", "300", 65)); al.add (nieuwe auteur ("Deborah", "Sky Boys", 51)); al.add (nieuwe auteur ("George RR", "A Song of Ice and Fire", 62)); / * * De lijst sorteren met behulp van de methode Collections.sort (), we * kan deze methode gebruiken omdat we de * Vergelijkbare interface in onze door de gebruiker gedefinieerde klasse Author * / System.out.println ("Sorteren op voornaam auteur:"); Collections.sort (al); voor (Auteur au: al) { System.out.println (au.getFirstName () + "," + au.getBookName () + "," +au.getAuAge ()); } / * Sorteren met AuthorAgeComparator * / System.out.println ("Sorteren op auteur Leeftijd:"); Collections.sort (al, nieuwe AuthorAgeComparator ()); voor (Auteur au: al) { System.out.println (au.getFirstName () + "," + au.getBookName () + "," + au.getAuAge ()); } / * Sorteren met BookNameComparator * / System.out.println ("Sorteren op boeknaam:"); Collections.sort (al, nieuwe BookNameComparator ()); voor (Auteur au: al) { System.out.println (au.getFirstName () + "," + au.getBookName () + "," + au.getAuAge ()); } } }
Output:
Sorteren op auteur Voornaam: Deborah, Sky Boys, 51 Frank, 300, 65 George RR, A Song of Ice and Fire, 62 Henry, Kreeftskeerkring, 45 Nalo, bruin meisje in de ring, 56 Sorteren op auteur Leeftijd: Henry, Kreeftskeerkring, 45 Deborah, Sky Boys, 51 Nalo, bruin meisje in de ring, 56 George RR, A Song of Ice and Fire, 62 Frank, 300, 65 Sorteren op boeknaam: Frank, 300, 65 George RR, A Song of Ice and Fire, 62 Nalo, bruin meisje in de ring, 56 Deborah, Sky Boys, 51 Henry, Kreeftskeerkring, 45
Laat een reactie achter