Java 番石榴过滤器问题

Java 番石榴过滤器问题,java,guava,Java,Guava,你能解释一下为什么我的过滤不起作用吗?(过滤未完成,信息未打印出来) 你觉得这个方法有什么问题吗 谢谢,Collections2.filter返回经过筛选的集合,它不会修改传递的集合 编辑 正如JB Nizmet在下面解释的那样,Collections2.filter是原始集合上的一个视图,只有在实际迭代结果或访问结果时,您才会看到谓词的计算结果 将结果分配给变量、打印其大小并查看调试器内谓词方法中的堆栈跟踪,这将非常有用。作为参数传递的集合的确切类型是什么?你确定它不是空的吗?不是空的,因为在

你能解释一下为什么我的过滤不起作用吗?(过滤未完成,信息未打印出来)

你觉得这个方法有什么问题吗


谢谢,

Collections2.filter
返回经过筛选的集合,它不会修改传递的集合

编辑 正如JB Nizmet在下面解释的那样,
Collections2.filter
是原始集合上的一个视图,只有在实际迭代结果或访问结果时,您才会看到
谓词的计算结果


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

作为参数传递的集合的确切类型是什么?你确定它不是空的吗?不是空的,因为在调用过滤器之前,它会打印出大小…很好。但是,它与缺少适当的日志信息有什么关系呢?返回的集合不是第一个集合的副本,只有接受的元素。这是一个比原来的观点。返回集合的每个方法都将使用谓词来计算其结果。例如,迭代返回的集合将调用每个元素上的谓词,以确定是否必须忽略当前元素。似乎这就是问题所在:)顺便说一句,如果您确实想要一个就地过滤器,您可以使用。但通常视图更方便。@ChrisPovirk:你的评论及时救了我的命,太好了!
@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());
}
~~~size:6 
~~~size POST:6