Если вы открыты для использования библиотеки сторонних производителей , вы можете использовать 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}
В данном конкретном случае, вы можете просто непосредственно в .collect
List
Bag
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.