Recent Changes - Search:

Oktatás

* Programozás 2
  + feladatsor
  + C feladatsor
  + Python feladatsor
  + GitHub oldal

* Szkriptnyelvek
  + feladatsor
  + quick link

* levelezősök
  + Adator. prog.
  + feladatsor
  + quick link

teaching assets


Félévek

* 2024/25/1
* archívum


Linkek

* kalendárium
   - munkaszüneti napok '20
* tételsorok
* jegyzetek
* szakdolgozat / PhD
* ösztöndíjak
* certificates
* C lang.
* C++
* C#
* Clojure
* D lang.
* Java
* Nim
* Scala


[ edit | logout ]
[ sandbox | passwd ]

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?

  • Ha az első obj. kisebb, mint a második, akkor negatív értéket.
  • Ha egyenlők, akkor 0-t.
  • Ha az első obj. nagyobb, mint a második, akkor pozitív értéket.

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();
            }

        });
Cloud City

  

Blogjaim, hobbi projektjeim

* The Ubuntu Incident
* Python Adventures
* @GitHub
* heroku
* extra
* haladó Python
* YouTube listák


Debrecen | la France


[ edit ]

Edit - History - Print *** Report - Recent Changes - Search
Page last modified on 2021 November 19, 11:50