您能解释一下为什么我的过滤不起作用吗? (过滤器未完成,消息未打印出来)。
@Override
protected void fetchValueObjectsListPostSpecificAction() {
logger.info("~~~size:" + this.valueObjectsList.size());
// show only scenarios which have applications related defined
Collections2.filter(this.valueObjectsList, new Predicate<PlanScenarioVo>() {
@Override
public boolean apply(final PlanScenarioVo arg0) {
System.out.println("!!!!!!!!!!---FILTER");
return (StringUtils.isNotEmpty(arg0.getApplication().getInternalId()));
}
});
logger.info("~~~size POST:" + this.valueObjectsList.size());
}
至少我想确保它进入 apply 方法,但我没有在输出中看到任何内容,只有 size(6) 和 size POST(6)。
~~~size:6
~~~size POST:6
你发现这个方法有什么问题吗?
谢谢
最佳答案
Collections2.filter
返回过滤后的Collection,它不会修改传递的集合。
编辑
正如 JB Nizmet 下面所解释的,Collections2.filter
是原始集合的 View ,只有当您实际迭代时,您才会看到 Predicate
被评估结果或访问它。
这对于您将结果分配给变量、打印其大小以及在调试器内的谓词方法中查看堆栈跟踪非常有用。
关于java - Guava 过滤器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847645/