Я просто столкнулся с вопросом при использовании метода List
и его stream()
. Хотя я знаю, как их использовать, я не совсем уверен, когда их использовать.
Например, у меня есть список, содержащий различные пути в разных местах. Теперь я хотел бы проверить, содержит ли один заданный путь какой-либо из путей, указанных в списке. Я хотел бы вернуть boolean
в зависимости от того, было ли выполнено условие.
Это, конечно, не сложная задача сама по себе. Но мне интересно, следует ли использовать потоки или цикл for (-each).
Список
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Пример - Stream
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
всегда имеет строчный формат.
Мое первое предположение заключается в том, что для каждого подхода выполняется быстрее, потому что цикл будет немедленно возвращаться, если условие выполнено. В то время как поток по-прежнему будет циклически перебирать все записи списка, чтобы завершить фильтрацию.
Является ли мое предположение правильным? Если да, то почему (а точнее, когда) я бы использовал stream()
, то?