2011-01-11 104 views
0

在apache.commons.collections有一個叫MapUtils具有這兩種方法來定義地圖,可以根據需求對象創建的地圖類:爲什麼我不能在Apache Commons中將Transformer設置爲LazyList?

所以我可以使用工廠實例化對象

Factory factory = new Factory() { 
    public Object create() { 
     return new Object(); 
    } 
} 

或變壓器來實例化新對象取決於地圖

Transformer factory = new Transformer() { 
    public Object transform(Object mapKey) { 
     return new Object(mapKey); 
    } 
} 

有對象列出了類似的類的關鍵:ListUtils,但這個類只有一個工廠的方法:

我想在地圖情況下轉換對象,但使用列表中對象的索引而不是地圖中的鍵。

Transformer factory = new Transformer() { 
    public Object transform(int index) { 
     return new Object(index); 
    } 
} 

我的問題是爲什麼沒有lazyList(List list,Transformer transformer)? apache是​​否提供任何其他List來完成此操作,還是必須構建自定義實現?

謝謝。

+1

它不存在,因爲它從未實現過。你只需要解決它。 – skaffman 2011-01-11 16:41:42

回答

1

首先,在我看來你應該使用Guava這樣的事情......它充分利用了泛型,並提供了一個更加深思熟慮,緊湊和合理的API。它還提供了一種Lists.transform方法,其基於在列表中的每個位置處的元素來變換基礎List

這就是說,我不認爲一個變換方法轉換List索引是很有道理的。實際潛在List將是完全沒有意義的,因爲轉換會忽略它包含的元素......只有它的大小很重要。你能解釋一下你爲什麼想要這樣做嗎?

+0

我認爲List.transform不適合我的需要。我想使用插入對象的索引來創建對象,因爲我正在創建一個依賴索引的迭代結構。 List.transform允許在添加對象之前對其進行變換,但變換函數不知道索引。我會寫我自己的實現。不管怎麼說,還是要謝謝你。 – Javi 2011-01-12 17:11:18

相關問題