[英]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.