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