[JAVA] Créer une carte multi-touches avec une bibliothèque standard

Si vous avez besoin d'une carte avec plusieurs clés, vous pouvez utiliser une bibliothèque tierce, ou vous pouvez imbriquer la bibliothèque standard Map. Ici, un exemple est une carte avec trois touches. Le premier est «get ()». Renvoie «null» si aucune valeur avec la clé spécifiée n'existe.

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

Vient ensuite 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);
}

Si vous connaissez le modèle, vous pouvez facilement créer une carte avec 4 touches ou plus. Voici le code de test.

@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 () ressemble à ceci:

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

Recommended Posts

Créer une carte multi-touches avec une bibliothèque standard
Créez un serveur Web simple avec la bibliothèque standard Java com.sun.net.httpserver
Créez un fichier jar avec la commande
Créez un terrain de jeu avec Xcode 12
Créez une image Docker avec le JDK Oracle installé (miam
À propos du comportement lors de la création d'un mappage de fichiers avec Java
Créez un environnement Vue3 avec Docker!
Créer une carte de liste avec LazyMap
Créez des exceptions avec une interface fluide
[Rails6] Créer une nouvelle application avec Rails [Débutant]
Créez un projet de développement d'application Spring Boot avec la commande cURL + tar
Créez une application Web simple avec Dropwizard
Créez une carte du métro de Tokyo à partir du fichier CSV de la station data.jp
[Retrait des rails] Créez une fonction de retrait simple avec des rails
[Java] Créez un fichier jar compressé et non compressé avec la commande jar
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
Exécutez DMN à l'aide du moteur Camunda DMN
[Rails 5] Créer une nouvelle application avec Rails [Débutant]
(Mémo) Obtenez un ensemble de jars de bibliothèque dépendants à l'aide de Gradle
Faisons une application de calculatrice avec Java ~ Créez une zone d'affichage dans la fenêtre
[Memo] Créez facilement un environnement CentOS 8 avec Docker
Créez une application de recherche simple avec Spring Boot
Créer un CSR avec des informations étendues en Java
Créez un tableau d'affichage simple avec Java + MySQL
[Rails] rails nouveau pour créer une base de données avec PostgreSQL
[Windows] [IntelliJ] [Java] [Tomcat] Créer un environnement pour Tomcat 9 avec IntelliJ
Créons un processus chronométré avec la minuterie de Java! !!
Sortez avec un suffixe sur la méthode
[Java] Créer une collection avec un seul élément
Créez une discussion d'équipe avec Rails Action Cable
Créer un compte SandBox avec IP Fastlane Spaces
Une histoire emballée avec le scanner d'entrée standard de Java
Créer un serveur API Web avec Spring Boot
Créer un environnement de développement Spring Boot avec docker
Présentation de la bibliothèque
Essayez de créer un modèle tridimensionnel (format PLY) à partir de la carte topographique numérique DSM de toute la préfecture de Hyogo
3. Créez une base de données à laquelle accéder à partir du module Web
Créer un site EC avec Rails 5 ⑨ ~ Créer une fonction de panier ~
Essayez d'implémenter le tamis Eratostenes en utilisant la bibliothèque standard de Java
Créez un modèle pour le widget iOS14 avec la configuration d'intention.
[Java] Comment chiffrer avec le chiffrement AES avec une bibliothèque standard
L'histoire de la création d'un proxy inverse avec ProxyServlet
Créez une application de chat avec WebSocket (Tyrus) + libGDX + Kotlin
[Note] Créez un environnement Java à partir de zéro avec docker
Créer un service avec un modèle vide Liferay 7.0 / DXP
Créez un site de démonstration simple avec Spring Security avec Spring Boot 2.1
Accro au Webpacker fourni en standard avec Rails 6
Créez un écran d'authentification de connexion à l'aide de la fonction de session