Если вы открыты для использования библиотеки сторонних производителей , вы можете использовать Collectors2класс в Eclipse , Collections преобразовать Listк Bagиспользуя Stream. A Bag- это структура данных, созданная для подсчета .
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());
Вывод:
{World=1, Hello=2}
В данном конкретном случае, вы можете просто непосредственно в .collectListBag
Bag<String> counted =
list.stream().collect(Collectors2.toBag());
Вы также можете создать Bagбез использования Stream, адаптировав Listс протоколами Eclipse Collections.
Bag<String> counted = Lists.adapt(list).countBy(each -> each);
или в данном конкретном случае:
Bag<String> counted = Lists.adapt(list).toBag();
Вы также можете просто создать мешок напрямую.
Bag<String> counted = Bags.mutable.with("Hello", "Hello", "World");
A Bag<String>как Map<String, Integer>в том, что он внутренне отслеживает ключи и их количество. Но, если вы спросите Mapключ, которого он не содержит, он вернется null. Если вы спросите Bagключ, он не содержит использованиеoccurrencesOf , он вернет 0.
Примечание: я являюсь коммиттером для Eclipse Collections.