Якщо ви відкриті для використання бібліотеки сторонніх виробників , ви можете використовувати 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.