One-liner для подсчета числа вхождений String в String [] в Java?
У меня есть массив String
:
String[] myArray = {"A", "B", "B", "C"};
Есть ли быстрый способ подсчитать количество вхождений строки в этом массиве? Да, я знаю, что могу перебирать и делать сам счет:
int count = 0;
String whatToFind = "B";
for (String s : myArray) {
if (s.equals(whatToFind)) {
++count;
}
}
Но мне было интересно, есть ли для этого функция полезности. Я не мог найти ничего в Arrays
или ArrayUtils
. Можно ли сделать это с помощью одного слоя?
Ответы
Ответ 1
Вы можете использовать метод frequency
:
List<String> list = Arrays.asList(myArray);
int count = Collections.frequency(list, "B");
или в одной строке:
int count = Collections.frequency(Arrays.asList(myArray), "B");
С Java 8 вы также можете написать:
long count = Arrays.stream(myArray).filter(s -> "B".equals(s)).count();
Или с помощью ссылки на метод:
long count = Arrays.stream(myArray).filter("B"::equals).count();
Ответ 2
Вы также можете попробовать Guava, который содержит полезные утилиты. Используя приведенный ниже код, вы можете подсчитать частоту с помощью Multiset:
public static void main(final String[] args) {
String[] myArray = {"A", "B", "B", "C"};
Multiset<String> wordsMultiset = HashMultiset.create();
wordsMultiset.addAll(new ArrayList<String>(Arrays.asList(myArray)));
int counts=wordsMultiset.count("B");
System.out.println(counts);
}
Хотя я знаю, что вы ищете один лайнер, но Guava полон многих других utils, которые невозможно с помощью обычных java-utils.