[JAVA] Erstellen Sie eine Mehrschlüsselkarte mit einer Standardbibliothek

Wenn Sie eine Karte mit mehreren Schlüsseln benötigen, können Sie eine Bibliothek eines Drittanbieters verwenden oder die Standardbibliothek "Karte" verschachteln. Hier ist ein Beispiel eine Karte mit drei Schlüsseln. Das erste ist get (). Gibt "null" zurück, wenn kein Wert mit dem angegebenen Schlüssel vorhanden ist.

public static <A, B, C, D> D get(Map<A, Map<B, Map<C, D>>> map, A a, B b, C c) {
    return Optional.ofNullable(map.get(a))
        .map(m -> m.get(b))
        .map(m -> m.get(c))
        .orElse(null);
}

Als nächstes kommt put ().

public static <A, B, C, D> void put(Map<A, Map<B, Map<C, D>>> map, A a, B b, C c, D d) {
    map.computeIfAbsent(a, t -> new HashMap<>())
        .computeIfAbsent(b, t -> new HashMap<>())
        .put(c, d);
}

Wenn Sie das Muster kennen, können Sie einfach eine Karte mit 4 oder mehr Tasten erstellen. Unten ist der Testcode.

@Test
public void testMultiKeyMap() {
    Map<Integer, Map<Integer, Map<Integer, Integer>>> map = new HashMap<>();
    for (int a = 0, value = 0; a < 2; ++a)
        for (int b = 0; b < 2; ++b)
            for (int c = 0; c < 2; ++c)
                put(map, a, b, c, value++);
    Map<Integer, Map<Integer, Map<Integer, Integer>>> expected =
        Map.of(0, Map.of(0, Map.of(0, 0,
                                   1, 1),
                         1, Map.of(0, 2,
                                   1, 3)),
               1, Map.of(0, Map.of(0, 4,
                                   1, 5),
                         1, Map.of(0, 6,
                                   1, 7)));
    assertEquals(expected, map);
    for (int a = 0, value = 0; a < 2; ++a)
        for (int b = 0; b < 2; ++b)
            for (int c = 0; c < 2; ++c)
                assertEquals(value++, get(map, a, b, c));
    assertEquals(null, get(map, 2, 2, 2));
}

map.toString () sieht folgendermaßen aus:

{0={0={0=0, 1=1}, 1={0=2, 1=3}}, 1={0={0=4, 1=5}, 1={0=6, 1=7}}}

Recommended Posts

Erstellen Sie eine Mehrschlüsselkarte mit einer Standardbibliothek
Erstellen Sie einen einfachen Webserver mit der Java-Standardbibliothek com.sun.net.httpserver
Erstellen Sie mit dem Befehl eine JAR-Datei
Erstellen Sie einen Spielplatz mit Xcode 12
Erstellen Sie ein Docker-Image mit installiertem Oracle JDK (yum
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie eine Listenkarte mit LazyMap
Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle
Erstellen Sie ein Maven-Projekt mit Befehlen
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
Erstellen Sie mit dem Befehl cURL + tar ein Spring Boot-App-Entwicklungsprojekt
Erstellen Sie mit Dropwizard eine einfache Webanwendung
Erstellen Sie eine U-Bahn-Karte von Tokio aus der CSV-Datei von station data.jp
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
[Java] Erstellen Sie mit dem Befehl jar eine JAR-Datei, die sowohl komprimiert als auch nicht komprimiert ist
[Java] Verwenden Sie kryptografische Technologie mit Standardbibliotheken
Führen Sie DMN mit der Camunda DMN Engine aus
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
(Memo) Holen Sie sich mit Hilfe von Gradle eine Reihe von abhängigen Bibliotheksgläsern
Erstellen wir eine Taschenrechner-App mit Java ~ Erstellen Sie einen Anzeigebereich im Fenster
[Memo] Erstellen Sie mit Docker ganz einfach eine CentOS 8-Umgebung
Erstellen Sie mit Spring Boot eine einfache Such-App
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Erstellen Sie mit Java + MySQL ein einfaches Bulletin Board
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
[Windows] [IntelliJ] [Java] [Tomcat] Erstellen Sie mit IntelliJ eine Umgebung für Tomcat 9
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Geben Sie ein Suffix für die Methode an
[Java] Erstellen Sie eine Sammlung mit nur einem Element
Erstellen Sie einen Team-Chat mit Rails Action Cable
Erstellen Sie ein SandBox-Konto mit Fastlane Spaces IP
Eine Geschichte voller Javas Standardeingabescanner
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Vorstellung der Bibliothek
Versuchen Sie, ein dreidimensionales Modell (PLY-Format) aus der numerischen topografischen Karte DSM der gesamten Präfektur Hyogo zu erstellen
3. Erstellen Sie eine Datenbank für den Zugriff über das Webmodul
Erstellen einer EC-Site mit Rails 5 ⑨ ~ Erstellen einer Warenkorbfunktion ~
Versuchen Sie, das Eratostenes-Sieb mithilfe der Java-Standardbibliothek zu implementieren
Erstellen Sie eine Vorlage für das iOS14-Widget mit Absichtskonfiguration.
[Java] Verschlüsselung mit AES-Verschlüsselung mit Standardbibliothek
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Erstellen Sie eine Chat-App mit WebSocket (Tyrus) + libGDX + Kotlin
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Erstellen Sie einen Service mit einem leeren Modell Liferay 7.0 / DXP
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Süchtig nach dem Webpacker, der standardmäßig mit Rails 6 geliefert wird
Erstellen Sie mit der Sitzungsfunktion einen Anmeldeauthentifizierungsbildschirm