Как посчитать совпадающие элементы в ArrayList в Java - PullRequest
1 голос
/ 30 мая 2011

У меня есть вопрос о том, как считать соответствующие элементы в ArrayList в Java. Например: Мой ArrayList содержит [sport, sport, ball, player, sport]

мне нужно вывести как:

word sport frequency 3
word ball  frequency 1
word player frequency 1

спасибо за продвижение

Ответы [ 4 ]

5 голосов
/ 30 мая 2011

Используйте карту:

Map<String, Integer> occurrencies = new HashMap<String, Integer>();
for (String word : list) {
    occurrencies.put(word, occurrencies.containsKey(word)
    ? occurrencies.get(word) + 1 : 1);
}
for (Entry<String, Integer> entry : occurrencies.entrySet()) {
    System.out.println("Word: "+entry.getKey()
                     + ", occurences: "+entry.getValue());
}

Если вы хотите, чтобы слова сортировались в алфавитном порядке, используйте TreeMap вместо HashMap.

(Конечно, было бы намного проще использовать гуаву Multiset, как предлагали другие)

2 голосов
/ 30 мая 2011

Если вы хотите получить внешнюю зависимость: библиотеки Google Guava содержат различные реализации Multiset , который является названием для того, что вы хотите. Если вы не хотите зависеть от библиотеки, вы можете хотя бы взглянуть на исходный код. Multiset - это, по сути, карта некоторого типа с целым числом, в котором содержится счетчик определенного элемента в коллекции.

Конечно, я предполагаю, что вы действительно можете заменить свой ArrayList на Multiset.

1 голос
/ 30 мая 2011

Вы также можете отсортировать список и затем посчитать, сколько раз слово повторяется

добавлен бонус алфавитного порядка в выводе

1 голос
/ 30 мая 2011

Скопируйте содержимое в другую структуру данных:

Map<String, Integer>

Ключ (String) - это слово, значение Integer хранит число .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...