J'utilise le code mentionné ci-dessous pour trouver le nombre de fois où chaque mot s'est produit dans une chaîne.
Map<String, Integer> map1 = map.entrySet().parallelStream().collect(Collectors.toMap(entry -> entry.getKey(), entry -> Integer.valueOf(entry.getValue())));
ce code renvoie Map
Je souhaite transformer ce code pour renvoyer Map
. J'ai essayé de faire cela en utilisant le code ci-dessous,
Mais cela lance ClassCastException java.lang.Integer ne peut pas être converti en java.lang.Long
Map<String, Long> map = Arrays.asList(text.split("\\s+")).stream().collect(Collectors.groupingBy(Function.identity(),LinkedHashMap::new,Collectors.counting()))
S'il vous plaît, aidez-moi à résoudre ce problème, j'en ai besoin pour retourner la carte
3 Réponses :
Vous devez convertir un long en entier dont vous avez besoin que la valeur soit o.getValue().intValue()
Map<String, Integer> map = Arrays.asList(text.split("\\s+")).stream() .collect(Collectors.groupingBy(Function.identity(),LinkedHashMap::new,summingInt(value -> 1)));
Il existe un moyen pour vous de placer en premier convertir en Map
par summingInt (x -> 1))
Map<String, Integer> stringIntegerMap = stringLongMap.entrySet().stream().collect(toMap(Map.Entry::getKey, o -> o.getValue().intValue(), (a, b) -> b));
Collectors.counting ()
n'est rien de plus que Collectors.reducing (0L, e -> 1L, Long :: sum)
( source ); utilisez plutôt Collectors.reducing (0, e -> 1, Integer :: sum)
et vous serez défini:
Map<String, Integer> map = Arrays.asList(text.split("\\s+")).stream().collect(Collectors.groupingBy( Function.identity(), LinkedHashMap::new, Collectors.reducing(0, e -> 1, Integer::sum) ));
Vous pouvez effectuer une conversion de Long
en Integer
après le comptage comme
Map<String, Integer> map = Arrays.stream(text.split("\\s+")) .collect(Collectors.toMap(Function.identity(), word -> 1, Integer::sum));
mais vous pouvez également compter en utilisant un int
type de valeur en premier lieu:
Map<String, Integer> map = Arrays.stream(text.split("\\s+")) .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.summingInt(word -> 1)));
Ceci additionne un pour chaque mot. Vous pouvez utiliser la même approche avec le collecteur toMap
:
Map<String, Integer> map = Arrays.stream(text.split("\\s+")) .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.collectingAndThen(Collectors.counting(), Long::intValue)));
Pouvez-vous montrer les déclarations complètes? (y compris les variables auxquelles vous attribuez les résultats).
entry -> Integer.valueOf (entry.getValue ()))
àentry.getValue (). intValue ()
?@Eran Veuillez vérifier les mises à jour.
Y a-t-il un moyen de faire la même chose sur la première étape elle-même plutôt que de le faire après, est ce que je regarde