Guava Collections2.transform不起作用

时间:2014-07-02 20:42:53

标签: java guava

我在调试器中启动以下代码:

List<MyBean> target = getMyBeans();
Collections2.transform(target, new Function<MyBean, MyBean>() { //BREAKPOINT: target.length equals 4
     @Nullable
     @Override
     public MyBean apply(@Nullable MyBean bean) {
          return removeUnnecessaryProperties(bean); //BREAKPOINT: never invoked
     }
});

问题: Collections2.transform永远不会被调用,尽管target有4个元素。

问题:为什么永远不会调用Collections2.transform

2 个答案:

答案 0 :(得分:5)

transform返回一个新的Collection,仅在需要时转换基础集合中的元素。因此,当您迭代返回的Function时,target中的每个元素都会调用一次Collection

根据您的代码判断,您真正想做的事情要简单得多(假设removeUnnecessaryProperties返回传递给它的同一个对象):

for (MyBean bean : target) {
  removeUnnecessaryProperties(bean);
}

答案 1 :(得分:2)

Collections2.transform是一个懒惰的操作。

文档说:

  

返回的集合是fromCollection的实时视图;改变为   一个影响另一个。

要使其工作,每个元素在访问时都必须进行转换。

尝试使用转换的集合,例如迭代它 - 然后你会看到你的变换方法被调用。