java - Guava 过滤器问题

标签 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 方法,但我没有在输出中看到任何内容,只有 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/

相关文章:

java - 查询 Facebook 时停止工作线程

java - 静态 Lists.transform 标记为错误,但使用相同变量的 Collections.transform 可以工作

Java将áéőűú更改为aeouu

java - spring中如何使用jackson代替JdkSerializationRedisSerializer

java - 事件总线订阅问题(Otto - Guava 事件总线)

java - List<String> 列表的字符串表示

java - 为 for 循环中的每个对象创建 Multimap

concurrency - 如何使用 Guava ListenableFuture 和 Futures.chain() 方法

java - 重写 getPreferredSize 和 PaintComponent 方法,为什么?

java - 覆盖方法和动态绑定(bind)