您能解释为什么我的过滤无效吗? (过滤器未完成且消息未打印出来。)
@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方法,但我没有看到任何输出,只有大小(6)和大小POST(6)。
~~~size:6
~~~size POST:6
你觉得这个方法有问题吗?
谢谢,
答案 0 :(得分:8)
Collections2.filter
返回过滤后的集合,它不会修改已传递的集合。
修改强>
正如JB Nizmet在下面解释的那样,Collections2.filter
是原始集合的视图,只有当您实际迭代结果或访问结果时,才会看到Predicate
进行评估。
将结果分配给变量,打印其大小,并在调试器内的谓词方法中查看堆栈跟踪将非常有用。