la collecte de HashMap<String, List<String>> java 8
Je veux être en mesure de convertir un List
à un HashMap
où la clé est le elementName
et les valeurs d'une liste de quelque chose d'aléatoire (dans ce cas c'est le Nom de l'Élément). Donc en bref je veux (A->List(A), B->List(B), C-> List(C)
). J'ai essayé d'utiliser toMap()
et en passant la keyMapper
et ValueMapper
mais j'obtiens une erreur de compilation. Je serais vraiment reconnaissant si quelqu'un peut m'aider.
Merci!
public static void main(String[] args) {
//TODO Auto-generated method stub
List<String> list = Arrays.asList("A","B","C","D");
Map<String, List<String>> map = list.stream().map((element)->{
Map<String, List<String>> map = new HashMap<>();
map.put(element, Arrays.asList(element));
return map;
}).collect(??);
}
Function<Map<String, String>, String> key = (map) -> {
return map.keySet().stream().findFirst().get();
};
Function<Map<String, String>, String> value = (map) -> {
return map.values().stream().findFirst().get();
};
=== Cela a fonctionné pour moi
Merci à tous pour l'aide les gars! @izstas "ils doivent travailler sur les éléments" a beaucoup aidé :). En fait c'est ce que je cherchais pour être exact
public static void test2 (){
Function<Entry<String, List<String>>, String> key = (entry) -> {
return entry.getKey();
};
Function<Entry<String, List<String>>, List<String>> value = (entry) -> {
return new ArrayList<String>(entry.getValue());
};
BinaryOperator<List<String>> merge = (old, latest)->{
old.addAll(latest);
return old;
};
Map<String, List<String>> map1 = new HashMap<>();
map1.put("A", Arrays.asList("A1", "A2"));
map1.put("B", Arrays.asList("B1"));
map1.put("D", Arrays.asList("D1"));
Map<String, List<String>> map2 = new HashMap<>();
map2.put("C", Arrays.asList("C1","C2"));
map2.put("D", Arrays.asList("D2"));
Stream<Map<String, List<String>>> stream =Stream.of(map1, map2);
System.out.println(stream.flatMap((map)->{
return map.entrySet().stream();
}).collect(Collectors.toMap(key, value, merge)));
}
Qu'est-ce que l'erreur de compilation?
Postez votre code source, reportez-vous à Comment faire pour créer un Minimum, Complète et Vérifiable exemple
Je ne suis pas sûr, mais comme je sais que dans votre carte de la partie tout ce que vous avez à gauche est en adéquation avec le côté droit, de sorte que vous devrait revenir élément pas de carte, je pense 🙂
Postez votre code source, reportez-vous à Comment faire pour créer un Minimum, Complète et Vérifiable exemple
Je ne suis pas sûr, mais comme je sais que dans votre carte de la partie tout ce que vous avez à gauche est en adéquation avec le côté droit, de sorte que vous devrait revenir élément pas de carte, je pense 🙂
OriginalL'auteur user3869813 | 2014-07-23
Vous devez vous connecter pour publier un commentaire.
Fonctions
key
etvalue
vous avez défini dans votre code ne sont pas correctes car ils devraient fonctionner sur la éléments de votre liste et vos éléments ne sont pasMap
s.Le code suivant fonctionne pour moi:
Premier argument de
Collectors.toMap
définit comment faire une clé à partir d'un élément de liste (en la laissant comme l'est), le deuxième argument définit comment rendre une valeur (pour unArrayList
avec un seul élément).Oh, c'est une suggestion intéressante. Je vais mettre à jour ma réponse. Par ailleurs, il semble fonctionner pour moi, sans avoir à spécifier le paramètre de type explicite.
Cool. Ouais le type n'est pas nécessaire. C'était un copier/coller.
J'ai mis à jour la question avec la solution que je cherchais. Merci !
Ce code ne fonctionne pas pour plusieurs éléments, essayez avec
List<String> list = Arrays.asList("A", "B", "C", "D", "A");
OriginalL'auteur izstas
Vous pouvez utiliser le
groupingBy
méthode pour gérer l'agrégation, par exemple:Si vous voulez plus de flexibilité (par exemple, pour la carte la valeur et le retour d'un Jeu au lieu d'une Liste), vous pouvez toujours utiliser le
groupingBy
méthode avec plus de paramètres comme indiqué dans la javadoc:Je fixe l'exemple désolé. La méthode
groupingBy
est une méthode statique dansjava.util.stream.Collectors
.Merci! Il m'a aidé
Brillant sur la Carte<Ville<String>>. Merci!
OriginalL'auteur Phoenix
Merci à tous pour l'aide les gars! @izstas "ils doivent travailler sur les éléments" a beaucoup aidé :). En fait c'est ce que je cherchais pour être exact
OriginalL'auteur user3869813