-1
votes

Concaténer une liste de hashmap en un sur le même ordre qu'ils sont et sans écraser la clé

J'apprends la langue java et j'ai trouvé cet exercice. J'ai compris qu'ils voulaient concaténer la liste de Hashmap dans un haschmap dans le même ordre et sans écraser la clé, mais je n'ai pas compris les exemples, je ne trouve donc pas de disposition dans eux comme ils le disent que je pense que ma compréhension était fausse . Pouvez-vous m'expliquer comment ils travaillent?

Concaténate carte

Cette fonction recevra un seul paramètre appelé liste de cartes. La liste de cartes est une liste des cartes. Votre travail consiste à combiner toutes les cartes trouvées dans la liste des cartes dans une seule carte et renvoyez-la. Il y a deux règles pour ajouter Valeurs sur la carte.

Vous devez ajouter des paires de clés à la carte dans la carte dans la même commande dans la liste des cartes. Si la clé existe déjà, il ne peut pas être écrasé. En d'autres termes, si deux cartes ou plus ont la même clé, la clé à ajouter ne peut pas être écrasée par les cartes suivantes.
Signature: xxx

exemple: xxx


3 commentaires

Semble simple. Qu'avez-vous essayé? Pourriez-vous s'il vous plaît partager votre code c'est-à-dire ce que vous avez essayé?


Cette tâche n'est difficile pas à comprendre car les entrées sont étrangees. Vous devez fondamentalement ajouter toutes les paires lorsque vous les obtenez en itérant dans la liste et vérifiez s'il existe déjà ou non dans la carte de sortie.


Je viens d'ajouter une solution de flux, si vous pouviez juste jeter un coup d'oeil :)


5 Réponses :


0
votes
public static void main(String[] args) {

    //{b=55, t=20, f=26, n=87, o=93}, {s=95, f=9, n=11, o=71}, {f=89, n=82, o=29}
    HashMap<String, Integer> map1 = new HashMap<>();
    map1.put("b", 55);
    map1.put("t", 20);
    map1.put("f", 26);
    map1.put("n", 87);
    map1.put("o", 93);

    HashMap<String, Integer> map2 = new HashMap<>();
    map2.put("s", 95);
    map2.put("f", 9);
    map2.put("n", 11);
    map2.put("o", 71);

    HashMap<String, Integer> map3 = new HashMap<>();
    map3.put("f", 89);
    map3.put("n", 82);
    map3.put("o", 29);

    ArrayList<HashMap<String, Integer>> list = new ArrayList<>();
    list.add(map1);
    list.add(map2);
    list.add(map3);

    HashMap<String, Integer> flat = concatenateMap(list);

    System.out.println(flat.toString());

}

public static HashMap<String, Integer> concatenateMap(ArrayList<HashMap<String, Integer>> mapList){

    HashMap<String, Integer> result = new HashMap<>();

    //iterate all maps
    for(HashMap<String, Integer> map : mapList){

        //iterate all keys from map
        for(String key : map.keySet()){

            //if result already contains key, skip
            if(result.containsKey(key)){
                continue;
            }

            result.put(key, map.get(key));

        }

    }

    return result;

}

1 commentaires

Merci de votre aide



0
votes

Essayez ceci. xxx

et test: xxx


1 commentaires

Merci beaucoup pour votre aide



0
votes

Si vous utilisez Java 8 ou plus:

public static HashMap<String, Integer> concatenateMap(ArrayList<HashMap<String, Integer>> mapList){

    HashMap<String, Integer> result = new HashMap<>();
    mapList.stream().flatMap(map -> map.entrySet().stream()).forEachOrdered(m -> {
        result.putIfAbsent(m.getKey(), m.getValue());
    });
    return result;
}


1 commentaires

Merci mon frère, de m'aider



0
votes

Tout d'abord, veuillez lire Comment hashmap fonctionne vraiment? Il y a aussi deux autres références Dans cette question qui explique HashMap plus détaillé.

En plus de HASHMAP, dans votre problème, vous avez des arraylistes dans lesquels il y a des hashmaps. Il existe donc des haspmaps avec des valeurs ci-dessous (pour ajouter des valeurs à hayphmap il y a une méthode Met (clé, valeur) ): xxx

et tous ces Les hashmaps sont stockés dans ArrayList comme ci-dessous: xxx

dans votre question, il est écrit que:

Cette fonction sera donnée un seul paramètre appelé liste de cartes

SO list est le paramètre unique mentionné ci-dessus. Nous passerons maintenant à ce paramètre à une fonction qui concaténate toutes les cartes (sans aucune clé existante) et renvoie un hashmap. Voici la fonction: xxx

donc dans cette fonction a carte est créé et le premier élément de la liste attribuez-vous directement à ce sujet, de cette façon nous pouvons Sautez la première itération, car les clés sont uniques dans chaque HASHMAP et de toute façon, tous les éléments du premier hashmap seront ajoutés dans mapper . Après cela, nous commençons à partir du deuxième élément (INT I = 1), et nous itèrent chaque hashmap. De plus, nous avons une boucle intérieure dans laquelle nous itèrent des éléments de chaque hashmap (clé, paires de valeur). Enfin, nous vérifions l'existence de chaque clé dans notre objectif objet , s'il est déjà sur la carte, nous ignorons la ne pas remplacer, sinon nous l'ajoutons. Après des boucles, nous retournons notre carte objet.


2 commentaires

Incroyable, très facile, mais j'ai besoin de plus de pratiques et d'œuvres. Merci beaucoup.


Je suis le bienvenu, je suis heureux que ce soit utile pour vous.



0
votes

Utilisation d'un flux qui est assez facile, le troisième paramètre paramètre (i1, I2) -> i1) permet de choisir une première valeur en cas de double double xxx


0 commentaires