Вопрос про stream api java 8

240
25 января 2018, 19:03

Здравствуйте, имеется 2 стринговых листа List<String> fileList и List<String> arr, требуется вывести сколько слов в fileList содержатся в arr, сделал так:

fileList
        .stream()
        .filter(s -> arr
                        .stream()
                        .anyMatch(s::equals)
        )
        .count()

Правильный ли такой подход? Или есть какой-то более лучший способ?

Answer 1

Быстрее и проще будет воспользоваться пересечением множеств:

Set<String> set = new HashSet<>(fileList);
set.retainAll(new HashSet<String>(arr));
int count = set.size();

А если уж использовать стримы, то не плодить их для каждого элемента. Эффективнее будет так:

long count = fileList.stream()
                     .filter(arr::contains)
                     .count();
READ ALSO
Android, SQLite и REGEXP

Android, SQLite и REGEXP

ЗдравствуйтеПишется Андроид-приложение, в нем требуется использование Базы данных и поиск по ней с использованием регулярных выражений

226
Java pattern mapper

Java pattern mapper

Изучаю некоторые паттерны и вот остановился на паттерне мап

233
Задача про окончание урока [java] [требует правки]

Задача про окончание урока [java] [требует правки]

Подскажите пожалуйста как решать эту задачу на JavaПоявился предмет программирования и сходу на 2 паре дали эту задачу

209
Парсинг HTML на Java с Jsoup

Парсинг HTML на Java с Jsoup

Как можно получить 56,4115 вот отсюда:

247