Jeśli jesteś otwarty na korzystanie z biblioteki innej firmy, możesz użyć Collectors2
klasy w kolekcji Eclipse, aby przekonwertować List
plik na plik Bag
przy użyciu pliku Stream
. A Bag
to struktura danych stworzona do liczenia .
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());
Wynik:
{World=1, Hello=2}
W tym konkretnym przypadku można po prostu się bezpośrednio na .collect
List
Bag
Bag<String> counted =
list.stream().collect(Collectors2.toBag());
Możesz również utworzyć Bag
plik bez użycia a Stream
, dostosowując go List
za pomocą protokołów Eclipse Collections.
Bag<String> counted = Lists.adapt(list).countBy(each -> each);
lub w tym konkretnym przypadku:
Bag<String> counted = Lists.adapt(list).toBag();
Możesz także po prostu utworzyć torbę bezpośrednio.
Bag<String> counted = Bags.mutable.with("Hello", "Hello", "World");
A Bag<String>
jest jak a Map<String, Integer>
, ponieważ wewnętrznie śledzi klucze i ich liczbę. Ale jeśli poprosisz Map
o klucz, którego nie zawiera, zwróci null
. Jeśli poprosisz Bag
o klucz, którego nie zawiera occurrencesOf
, zwróci 0.
Uwaga: jestem promotorem Eclipse Collections.