J'ai une méthode avec la signature suivante: J'essaie de trouver la somme des valeurs des entrées qui a le préfixe de la cible code> code > chaîne. Je veux faire cela en utilisant des flux. C'est ce que j'ai fait: p> return map.entrySet().stream()
.filter((k, v) -> k.startsWith(target))
.map((k, v) -> v)
.sum();
4 Réponses :
Le problème est que ou pour votre version modifiée avec entrée () code> est une collection d'entrée
<> code>, il n'y a pas de
k code> et
v < / code>. Vous devriez essayer quelque chose comme ceci:
startswith code>: p>
L'approche globale pourrait être sain d'esprit, mais il y a une différence dans égale code> et
startswith code> et
somme code> peut être invoqué lors de la cartographie en intiqueger, longue, etc. pour leurs implémentations spécifiques ont cette API.
@NAMAN OP a changé la question après avoir posté ma réponse, initialement en question, il y avait égale code>. Mise à jour de ma réponse et corrigé la partie Sommet.
Vous devez utiliser Essayez ceci: p> map.entryset (). flux () code> vous donne un flux de
map.Entry
E -> E.BetKekey (). StartSweh (cible) Code> Pour obtenir les entrées La clé de la clé a le préfixe comme valeur
"cible" code> p> p>
Carte .Entry :: getvalue code> vous donne les valeurs des entrées filtrées afin que vous puissiez résumer les valeurs. P>
return map.entrySet().stream()
.filter(e -> e.getKey().startsWith(target))
.map(Map.Entry::getValue)
.reduce(0, Integer::sum);
"CODE> entrée de la carte code> renvoie un Utiliser l'entrée SET
getkey code> et
et
GetValue code> Pour accéder à la touche et à la valeur et à utiliser
MapToint code> et
somme code>. p>
A map.Entry code> est un seul objet qui ne peut pas être accédé par
(k, v) -> ... code>. Vous pouvez obtenir la clé et la valeur de cette entrée à l'aide de ses méthodes correspondantes
getkey () code> et
getvalue () code> ou utilisez une référence méthode et collectez la somme des valeurs:
int sum(Map<String, Integer> map, String target) {
return map.entrySet().stream()
.filter(e -> e.getKey().startsWith(target))
// use method reference
.collect(Collectors.summingInt(Map.Entry::getValue));
}
"Somme de valeurs des entrées qui correspondent à la chaîne" cible "donnée". Dans une carte, il ne peut y avoir qu'une seule touche correspondant à une chaîne cible par définition.
Merci, je voulais dire au préfixe