在Java 8流过滤器,是有办法适用于基于条件的流过滤器,的Java 8应用基于条件
例如
我有这样的流
if (isAccessDisplayEnabled) {
src = (List <Source>) sourceMeta.getAllSources.parallelStream()
.filter(k - > isAccessDisplayEnabled((Source) k))
.filter(k - > containsAll((Source) k, substrings, searchString))
.collect(Collectors.toList());
} else {
src = (List <Source>) sourceMeta.getAllSources.parallelStream()
.filter(k - > containsAll((Source) k, substrings, searchString))
.collect(Collectors.toList());
}
我加入滤波器
.filter(K - > isAccessDisplayEnabled((源)K)))
基于if-else条件的流上。有没有办法避免if-else,因为如果有更多的过滤器出现,那么它将很难维护。
请让我知道
我无法理解这一行,isAccessDisplayEnabled? s - > true:s - > isAccessDisplayEnabled(s),请你多解释一下,或者写一个解释它的博客。 – Umar
尝试读取它为'isAccessDisplayEnabled? (s - > true):(s - > isAccessDisplayEnabled(s))'。如果'isAccessDisplayEnabled'为'true',则使用lambda表达式's - > true',这实际上就像没有过滤器一样,否则使用's - > isAccessDisplayEnabled(s)'。它是[ternary operator](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html)与两个可选的[lambda表达式](http://docs.oracle.com/)的组合JavaSE的/教程/ JAVA/javaOO/lambdaexpressions.html)。 – Holger
@霍尔德:好的三元,但顺序是错的,不是吗?我猜如果你有一个布尔isAccessDisplayEnabled,那么你想过滤,否则如果为false,你不过滤。 'isAccessDisplayEnabled? (s - > isAccessDisplayEnabled(s)):(s - > true)' – sandwood