番石榴过滤器问题

时间:2011-10-21 09:47:09

标签: java guava

您能解释为什么我的过滤无效吗? (过滤器未完成且消息未打印出来。)

@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

你觉得这个方法有问题吗?

谢谢,

1 个答案:

答案 0 :(得分:8)

Collections2.filter 返回过滤后的集合,它不会修改已传递的集合。

修改 正如JB Nizmet在下面解释的那样,Collections2.filter是原始集合的视图,只有当您实际迭代结果或访问结果时,才会看到Predicate进行评估。

将结果分配给变量,打印其大小,并在调试器内的谓词方法中查看堆栈跟踪将非常有用。