为什么我不能在Apache Commons中将Transformer设置为LazyList?

时间:2011-01-11 16:34:33

标签: java collections apache-commons

在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来执行此操作,还是我必须构建自定义实现?

感谢。

1 个答案:

答案 0 :(得分:1)

首先,在我看来,你应该使用Guava来做这类事情......它充分利用了泛型,并提供了一个更加深思熟虑,紧凑而合理的API。它还提供了Lists.transform方法,该方法根据列表中每个位置的元素转换基础List

那就是说,我认为用索引转换List的转换方法没有多大意义。实际的基础List将完全没有意义,因为转换会忽略它包含的元素......只有它的大小才重要。你能解释一下你为什么要这样做吗?