Я просто столкнулся с вопросом при использовании a List
и его stream()
метода. Хотя я знаю, как их использовать, я не совсем уверен, когда их использовать.
Например, у меня есть список, содержащий разные пути в разные места. Теперь я хотел бы проверить, содержит ли один заданный путь какой-либо из путей, указанных в списке. Я хотел бы вернуть в boolean
зависимости от того, было ли выполнено условие.
Это, конечно, не сложная задача. Но мне интересно, следует ли мне использовать потоки или цикл for (-each).
Список
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Пример - поток
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Пример - для каждого цикла
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Обратите внимание, что path
параметр всегда в нижнем регистре .
Мое первое предположение заключается в том, что подход for-each быстрее, потому что цикл вернется немедленно, если условие будет выполнено. В то время как поток по-прежнему будет перебирать все записи списка, чтобы завершить фильтрацию.
Верно ли мое предположение? Если да, то почему (или, скорее, когда ) я должен использовать это stream()
?