替换java集合中的值

时间:2014-12-01 21:07:44

标签: java collections

我想更改未知类型集合的值。我找到java.util.Collections.replaceAll,但这仅适用于列表。我帮助自己创建了一个新的Collection并添加了更改的元素。

if (o instanceof Collection) {
            Collection<Object> newCollection = (Collection<Object>) o.getClass().newInstance();
            for (Iterator<Object> it = ((Collection<Object>)o).iterator(); it.hasNext(); ) {
                newCollection.add(doSomethingWith(it.next()));
            }

            return newCollection;
}

但我喜欢返回相同的List作为结果。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,如果不要求集合属于特定类型,则无法执行此操作:由于不需要对集合进行排序,因此允许您向Collection添加项目的唯一方法是add ,插入集合中未指定的位置。

集合迭代器也不允许你修改集合元素:一些迭代器允许你删除当前项目,但没有&#34;替换&#34;关于集合迭代器的方法。

ListIterator<T> interface提供set(T)方法,但它会阻止您使用已经有解决方案的List<T>

请注意,您的方法也不是防弹的 - 它依赖于传递给它的集合具有可访问的无参数构造函数的假设。