【发布时间】:2019-12-20 08:28:32
【问题描述】:
ArrayList<Boolean> values = new ArrayList<>(Arrays.asList(true, false, true, false, false, true));
List<String> filter = Arrays.asList("TRUE");
List<String> filter = Arrays.asList("FALSE");
List<String> filter = Arrays.asList("TRUE","FALSE");
if (!filter.isEmpty()) {
List<Boolean> collect = values.stream()
.filter(i -> i ? filter.contains("TRUE") : filter.contains("FALSE"))
.collect(Collectors.toList());
System.out.println(collect);
} else { System.out.println(values);}
使用过滤器值TRUE、FALSE 或TRUE,FALSE,我得到所需的结果[true, true, true]、[false, false, false] 和[true, false, true, false, false, true]。如果过滤器为空,则应按原样返回列表。 “TRUE”或“FALSE”可以代表任何字符串..
有没有更优雅的实现方式?
【问题讨论】:
-
用于改进工作代码的站点错误。最好在CodeReview 询问
-
为什么你的过滤器值是字符串?您不能将它们映射到
Boolean吗? “任何字符串”是什么意思?此代码是否按预期工作?我不确定你的问题。 -
filter(b -> filter.contains(b ? "TRUE" : "FALSE"))会有所改进 -
如何编译?
-
@Joe 出于某种原因,OP 选择为
filter显示三个可能的值,这也是我不清楚这个问题的部分原因。
标签: java java-stream predicate