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