Frage Erstellen Sie eine SortedMap in Java mit einem benutzerdefinierten Vergleicher


Ich möchte ein erstellen TreeMap in Java mit einer benutzerdefinierten Sortierreihenfolge. Die sortierten Schlüssel, die Zeichenfolge sind, müssen nach dem zweiten Zeichen sortiert werden. Die Werte sind auch Zeichenfolge.

Beispielkarte:

Za,FOO
Ab,Bar

17
2018-05-01 03:56


Ursprung


Antworten:


Sie können einen benutzerdefinierten Vergleicher wie folgt verwenden:

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

Probe:

    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}"

Beachten Sie, dass dies einfach davon ausgeht, dass String hat ein Zeichen bei Index 1. Es wirft StringIndexOutOfBoundsException wenn nicht.


Alternativ können Sie diesen Vergleich auch verwenden:

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

Diese Subtraktion "Trick" ist im Allgemeinen gebrochen, aber es funktioniert hier gut, weil die Subtraktion von zwei char wird nicht überlaufen int.

Das substring undcompareTo Lösung oben ist jedoch lesbarer.

Siehe auch:


28
2018-05-01 04:03



Angenommen, Sie meinen Hash nicht wie in der Hash-Funktion oder der Art ...

Sie können dies leicht erreichen, indem Sie eine "Wrapper" -Klasse für String erstellen und die compareTo-Methode überschreiben


0
2018-05-01 05:34