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 h3>
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. P>
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: p> blockQuote>xxx pré> exemple: p>
xxx pré> p>
5 Réponses :
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; }
Merci de votre aide
Essayez ceci. et test: p>
Merci beaucoup pour votre aide
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; }
Merci mon frère, de m'aider
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 et tous ces Les hashmaps sont stockés dans ArrayList comme ci-dessous: P> dans votre question, il est écrit que: p> Cette fonction sera donnée un seul paramètre appelé liste de cartes p>
blockQuote> SO donc dans cette fonction a Met (clé, valeur) code>): p>
list code> 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: p>
carte code> 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 code>. 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 code> objet code>, 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
code> objet. P> p>
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.
Utilisation d'un flux code> qui est assez facile, le troisième paramètre paramètre
(i1, I2) -> i1) code> permet de choisir une première valeur en cas de double double
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 :)