Jeśli jesteś otwarty na korzystanie z biblioteki innej firmy, możesz użyć Collectors2klasy w kolekcji Eclipse, aby przekonwertować Listplik na plik Bagprzy użyciu pliku Stream. A Bagto 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 .collectListBag
Bag<String> counted =
list.stream().collect(Collectors2.toBag());
Możesz również utworzyć Bagplik bez użycia a Stream, dostosowując go Listza 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 Mapo klucz, którego nie zawiera, zwróci null. Jeśli poprosisz Bago klucz, którego nie zawiera occurrencesOf, zwróci 0.
Uwaga: jestem promotorem Eclipse Collections.