[英]Guava Collections2.transform not work
我在调试器中启动以下代码:
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
}
});
问题:尽管target
有4个元素,但从不调用Collections2.transform
。
问题:为什么从不调用Collections2.transform
?
transform
返回一个新Collection
,仅在需要时才转换基础collection中的元素。 因此,例如,当您迭代返回的Collection
,将对target
每个元素调用一次Function
。
从您的代码来看,您真正想做的事情要简单得多(假设removeUnnecessaryProperties
返回与传递给它的对象相同的对象):
for (MyBean bean : target) {
removeUnnecessaryProperties(bean);
}
Collections2.transform
是一个惰性操作。
该文件说:
返回的集合是fromCollection的实时视图; 改变一个会影响另一个。
为此,每个元素在访问时都必须进行转换。
尝试使用转换后的集合,例如遍历它-然后您将看到转换方法被调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.