Uspořádaná mapa - příklad s komparátorem

Příklad, kdy jsou klíče uspořádané komparátorem:

Obrázek 15. Vložení účtů do mapy pod uspořádaným klíčem člověka - vlastníka

package tomp.ucebnice.kolekce;

import java.util.*;

public class SortedMapComparatorDemo {
    public static void main(String[]  args) {
        
        // vytvoříme mapu
        SortedMap sm = new TreeMap(new ClovekComparator());
        
        // naplníme ji třemi lidmi
        Clovek c1 = new Clovek("Josef", "Vykoukal");
        Ucet   u1 = new Ucet(100);
        sm.put(c1, u1);
        
        Clovek c2 = new Clovek("Dalimil", "Brabec");
        Ucet   u2 = new Ucet(50);
        sm.put(c2, u2);
        
        Clovek c3 = new Clovek("Viktor", "Kotrba");
        Ucet   u3 = new Ucet(2000);
        sm.put(c3, u3);

        // projdi abecedně všechny vlastníky účtů v mapě
        // proto je třeba získat iterátor nad množinou klíčů
        for(Iterator i = sm.keySet().iterator(); i.hasNext(); ) {
            Clovek majitel = (Clovek)i.next();
            Ucet ucet = (Ucet)sm.get(majitel);
            majitel.vypisInfo();
            System.out.println(" je majitelem uctu se zustatkem "
                               + ucet.zustatek + " Kc");
        }
    }    
    static class Ucet {
        double zustatek;
        public Ucet(double z) { 
            zustatek = z; 
        }
    }
    static class Clovek { // nemusí být Comparable
        String jmeno, prijmeni;
        Clovek (String j, String p) {
            jmeno = j;
            prijmeni = p;
        }
        public void vypisInfo() {
            System.out.print("Clovek "+jmeno+" "+prijmeni);
        }
    }
    static class ClovekComparator implements Comparator {
        public int compare(Object o1, Object o2) {
            // porovnává jen lidi a to podle příjmení
            if (o1 instanceof Clovek && o2 instanceof Clovek) {
                Clovek c1 = (Clovek)o1;
                Clovek c2 = (Clovek)o2;
                return c1.prijmeni.compareTo(c2.prijmeni);
            } else
                throw new IllegalArgumentException(
                "Nelze porovnat objekt typu Clovek s objektem jineho typu");
        }
    }
}

Obrázek 16. Spuštění funkčního pg. s uspořádanou mapou

Spuštění funkčního pg. s uspořádanou mapou