2011-01-11 105 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

相关问题