J'ai une liste:
liste privée
Je veux la convertir en LinkedHashMap (pour préserver l'ordre), de sorte que le premier deux valeurs dans la carte sont une entrée LinkedHashMap et ainsi de suite jusqu'à ce que la liste soit une LinkedHashMap:
Private LinkedHashMap
Ceci est ce que je suis venu avec. Certes, je suis nouveau dans les implémentations de Collectors, alors soyez patient:
zero:test0 one:test1 two:test2
cela me donne une erreur sur la ligne du constructeur LinkedHashMap:
Impossible de résoudre le constructeur de LinkedHashMap
Voici un exemple de ce à quoi la liste peut ressembler:
zero test0 one test1 two test2
et ce à quoi je veux que la carte ressembler à:
linked = list.stream() .collect(Collectors.toMap( Function.identity(), String::valueOf, //Used to be String::length LinkedHashMap::new));
Merci
3 Réponses :
Vous avez manqué fonction de fusion :
une fonction de fusion, utilisée pour résoudre les collisions entre les valeurs associées à la même clé, comme fournie à Map.merge (Object, Object, BiFunction)
Mais pour remplir la carte avec vos valeurs attendues à l'aide de l'API de flux, vous pouvez utiliser la méthode forEach
et IntStream :: iterate
de java9
LinkedHashMap<String, String> linked = new LinkedHashMap<>(); IntStream.iterate(0, n -> n < list.size(), n -> n + 2) .forEach(i -> linked.put(list.get(i), list.get(i + 1)));
Salut, merci pour la réponse. Vous avez raison, je manque l'instruction de fusion. Comment faire cela pour
Salut merci encore. Quelle est l'erreur, L'opérateur '+' ne peut pas être appliqué à '', 'int
il n'autorise pas les expressions lambda en combinaison avec des opérations mathématiques?
Non, c'est tout seul. J'obtiens une erreur pour les deux opérations mathématiques n -> n
n -> n + 2 // L'opérateur '+' ne peut pas être appliqué à ''
@ dk40149 La méthode iterate
est disponible à partir de java9
Pourquoi vous compliquez votre code, une simple boucle dans votre cas résout le problème:
zero:test0 one:test1 two:test2
C'est ma tentative avec java 8.
IntStream.range(0, list.size()) .mapToObj(index -> { if (index % 2 == 0) { return new AbstractMap.SimpleImmutableEntry<>(list.get(index), list.get(index + 1)); } return null; } ) .filter(Objects::nonNull) .collect(Collectors.toMap(AbstractMap.SimpleImmutableEntry::getKey, AbstractMap.SimpleImmutableEntry::getValue));
String :: length
renvoieInteger
pasString
Vouliez-vous déclarer
lié
commeMap
?Pouvez-vous s'il vous plaît donner des exemples de ce à quoi vous voulez que le LinkedHashMap ressemble pour différentes listes d'entrée?
Je voulais déclarer Map @ernest_k
s'il vous plaît voir OP @dnault