Domanda Crea una SortedMap in Java con un comparatore personalizzato


Voglio creare un TreeMap in Java con un ordinamento personalizzato. Le chiavi ordinate che sono stringhe devono essere ordinate in base al secondo carattere. I valori sono anche stringa.

Mappa di esempio:

Za,FOO
Ab,Bar

17
2018-05-01 03:56


origine


risposte:


Puoi usare un comparatore personalizzato come questo:

    Comparator<String> secondCharComparator = new Comparator<String>() {
        @Override public int compare(String s1, String s2) {
            return s1.substring(1, 2).compareTo(s2.substring(1, 2));
        }           
    };

Campione:

    SortedMap<String,String> map =
        new TreeMap<String,String>(secondCharComparator);
    map.put("Za", "FOO");
    map.put("Ab", "BAR");
    map.put("00", "ZERO");
    System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"

Si noti che questo semplicemente presuppone che il String ha un personaggio nell'indice 1. Getta StringIndexOutOfBoundsException se non lo fa.


In alternativa, puoi anche usare questo confronto:

return s1.charAt(1) - s2.charAt(1);

Questo "trucco" di sottrazione è in generale rotto, ma qui funziona bene perché la sottrazione di due char non traboccherà un int.

Il substring ecompareTo la soluzione sopra è più leggibile, però.

Guarda anche:


28
2018-05-01 04:03



Supponendo che tu non intenda Hash come nella funzione hash o l'ordinamento ...

Si potrebbe facilmente ottenere ciò creando una classe "wrapper" per String e sovrascrivendo il metodo compareTo


0
2018-05-01 05:34