Si vous êtes prêt à utiliser une bibliothèque tierce, vous pouvez utiliser la Collectors2
classe dans Eclipse Collections pour convertir le List
en un Bag
fichier Stream
. A Bag
est une structure de données conçue pour le comptage .
Bag<String> counted =
list.stream().collect(Collectors2.countBy(each -> each));
Assert.assertEquals(1, counted.occurrencesOf("World"));
Assert.assertEquals(2, counted.occurrencesOf("Hello"));
System.out.println(counted.toStringOfItemToCount());
Production:
{World=1, Hello=2}
Dans ce cas particulier, vous pouvez simplement collect
le List
directement dans un fichier Bag
.
Bag<String> counted =
list.stream().collect(Collectors2.toBag());
Vous pouvez également créer le Bag
sans utiliser de Stream
en adaptant le List
avec les protocoles des collections Eclipse.
Bag<String> counted = Lists.adapt(list).countBy(each -> each);
ou dans ce cas particulier:
Bag<String> counted = Lists.adapt(list).toBag();
Vous pouvez également créer le sac directement.
Bag<String> counted = Bags.mutable.with("Hello", "Hello", "World");
A Bag<String>
est comme a Map<String, Integer>
en ce sens qu'il garde en interne la trace des clés et de leur décompte. Mais, si vous demandez une Map
clé qu'il ne contient pas, il reviendra null
. Si vous demandez à un Bag
une clé qu'il ne contient pas occurrencesOf
, il renverra 0.
Remarque: je suis un committer pour les collections Eclipse.