Mot compte des fréquences de Java 8
La manière de compter la fréquence des mots de la Liste dans Java 8?
List <String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");
Le résultat doit être:
{ciao=2, hello=1, bye=2}
Vous devez vous connecter pour publier un commentaire.
Je veux partager la solution que j'ai trouvé, car au début je m'attendais à utiliser la carte-et-réduire méthodes, mais c'était un peu différent.
Ou pour les valeurs entières:
MODIFIER
- Je ajouter de la façon de trier les carte en valeur:
(NOTE: Voir les modifications ci-dessous)
Comme une alternative à Mounas répondre, ici, c'est une approche que le nombre de mots en parallèle:
Je ne suis pas tellement d'expérience avec JMH, peut-être que j'ai fait quelque chose de mal ici - suggestions et corrections sont les bienvenues:
Les temps ne sont similaires pour la série de cas d'une liste de 10000 éléments, et 2-lettre des mots.
Il pourrait être intéressant de vérifier si, même pour la plus grande liste des tailles, le concurrent versions éventuellement surpasser la série, mais n'ont pas le temps pour une autre référence avec toutes ces configurations.
Collectors.groupingByConcurrent(w->w, Collectors.counting())
sera plus efficace.ConcurrentMap
bien que je ne dirais pas stocker1
s “comptage”. Donc, en comptant mille occurrences d'un même mot peut donner une autre image...groupingBy
approche peut fonctionner en parallèle et il serait bon d'élargir le point de référence de voir les différences entre toutes les variantes (groupingBy
vstoMap
)×(ordinaire vsConcurrent
)...Trouver plus fréquentes de l'élément dans la collection, avec les génériques:
De calcul de l'élément de fréquences:
Si vous utilisez Eclipse Collections, il vous suffit de convertir le
List
à unSac
.Ce code fonctionne avec Java 5 - 8.
Remarque: je suis un committer pour Eclipse Collections
Voici une façon de créer une fréquence de la carte en utilisant les fonctions de mappage.
Ou
Je vais vous présenter ici la solution que j'ai faite (celle avec le groupement est beaucoup mieux 🙂 ).
Juste mon 0.02$
Un autre 2% de la mine, étant donné un tableau: