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.