0
votes

Comment trouver la somme des valeurs de la carte dont la clé contient le préfixe donné?

J'ai une méthode avec la signature suivante: xxx pré>

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();


2 commentaires

"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


4 Réponses :


5
votes

Le problème est que entrée () est une collection d'entrée <> , il n'y a pas de k et v < / code>. Vous devriez essayer quelque chose comme ceci: xxx

ou pour votre version modifiée avec startswith : xxx


2 commentaires

L'approche globale pourrait être sain d'esprit, mais il y a une différence dans égale et startswith et somme 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 . Mise à jour de ma réponse et corrigé la partie Sommet.



1
votes

map.entryset (). flux () code> vous donne un flux de map.Entry code> éléments.

Vous devez utiliser 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>

Essayez ceci: p>

return map.entrySet().stream()
    .filter(e -> e.getKey().startsWith(target))
    .map(Map.Entry::getValue)
    .reduce(0, Integer::sum);


0 commentaires

2
votes

"CODE> entrée de la carte renvoie un SET > .

Utiliser l'entrée getkey et et GetValue Pour accéder à la touche et à la valeur et à utiliser MapToint et somme . xxx


0 commentaires

0
votes

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));
}


0 commentaires