Oktatás * Programozás 2 * Szkriptnyelvek * levelezősök Félévek Linkek * kalendárium |
Java /
saját objektumok rendezése (Comparator)Objektumok rendezésére két módszer is van: 1) Comparable interfész implementálása, ill. 2) Comparator használata. Most a Comparator használatát nézzük meg, ami rugalmasabb, mint a másik módszer. Előnye, hogy az eredeti osztályt (aminek az objektumait rendezni akarjuk) nem kell módosítani, ill. az objektumokat többféle szempont szerint is rendezhetjük (pl. egy személyek listáját rendezhetünk családnév szerint, születési dátum szerint, magasság szerint, stb.). import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; class Teglalap { private int a; private int b; public Teglalap(int a, int b) { this.a = a; this.b = b; } public int kerulet() { return 2*a + 2*b; } public int terulet() { return a*b; } @Override public String toString() { return String.format("Teglalap(a=%d, b=%d)", this.a, this.b); } @Override public boolean equals(Object other) { return (other instanceof Teglalap) && (this.terulet() == ((Teglalap)other).terulet()); } } public class Proba { public static void main(String[] args) { Proba p = new Proba(); p.start(); } private void start() { Teglalap t1 = new Teglalap(4, 11); Teglalap t2 = new Teglalap(5, 8); Teglalap t3 = new Teglalap(4, 20); List<Teglalap> li = new ArrayList<>(); li.add(t1); li.add(t2); li.add(t3); System.out.println(li); Collections.sort(li, sortByTerulet()); System.out.println(li); } private Comparator<Teglalap> sortByTerulet() { return new Comparator<Teglalap>() { public int compare(Teglalap o1, Teglalap o2) { return o1.terulet() - o2.terulet(); } }; } } Kimenet: [Teglalap(a=4, b=11), Teglalap(a=5, b=8), Teglalap(a=4, b=20)] [Teglalap(a=5, b=8), Teglalap(a=4, b=11), Teglalap(a=4, b=20)] A compare függvény milyen értéket adjon vissza?
A rendezést akár egy utasításban is meg lehet ejteni: Collections.sort(li, new Comparator<Teglalap>() { public int compare(Teglalap o1, Teglalap o2) { return o1.terulet() - o2.terulet(); } }); |
Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |