你能解释为什么我的过滤不起作用吗?(过滤器未完成,消息未打印出来).
@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());
}
Run Code Online (Sandbox Code Playgroud)
至少我想确保它进入apply方法,但我没有看到任何输出,只有size(6)和大小POST(6).
~~~size:6
~~~size POST:6
Run Code Online (Sandbox Code Playgroud)
你觉得这个方法有问题吗?
谢谢,
Collections2.filter 返回已过滤的Collection,它不会修改传递的集合.
编辑
正如JB Nizmet在下面解释的那样,Collections2.filter是对原始集合的一个视图,Predicate只有在实际迭代结果或访问结果时才会看到评估.
将结果分配给变量,打印其大小,并在调试器内的谓词方法中查看堆栈跟踪将非常有用.
| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |