当我使用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;
}
实施例 - for-each循环
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
注意即path
参数总是小写。
我的第一个猜测是for-each方法更快,因为如果满足条件,循环将立即返回。尽管流仍然会遍历所有列表条目以完成过滤。
我的假设是否正确?如果是这样,为什么(或更确切地说当)我会用stream()
呢?
流比传统的for循环更富有表现力和可读性。在后面你需要小心if-then和条件等的内在性。流表达式非常清晰:将文件名转换为小写,然后过滤某些内容,然后计算,收集等结果:非常迭代计算流程的表达。 –
这里不需要'new String [] {...}'。只需使用'Arrays.asList(“my/path/one”,“my/path/two”)' – Holger
你是对的,但我打算展示我要处理的数据结构,它是一个String [ ]'。 – mcuenez