在apache.commons.collections中有一个名为MapUtils的类,它有两个定义Map的方法,可以为地图创建按需对象:
所以我可以使用工厂来实例化对象
Factory factory = new Factory() {
public Object create() {
return new Object();
}
}
或变换器,用于根据地图的键
实例化新对象Transformer factory = new Transformer() {
public Object transform(Object mapKey) {
return new Object(mapKey);
}
}
Lists有一个类似的类:ListUtils,但是这个类只有一个带有Factory的方法:
我想像在地图情境中那样转换对象,但是使用列表中对象的索引而不是地图中的键。
Transformer factory = new Transformer() {
public Object transform(int index) {
return new Object(index);
}
}
我的问题是为什么没有lazyList(List list,Transformer transformer)? apache是否提供了任何其他List来执行此操作,还是我必须构建自定义实现?
感谢。
答案 0 :(得分:1)
首先,在我看来,你应该使用Guava来做这类事情......它充分利用了泛型,并提供了一个更加深思熟虑,紧凑而合理的API。它还提供了Lists.transform方法,该方法根据列表中每个位置的元素转换基础List
。
那就是说,我认为用索引转换List
的转换方法没有多大意义。实际的基础List
将完全没有意义,因为转换会忽略它包含的元素......只有它的大小才重要。你能解释一下你为什么要这样做吗?