我想更改未知类型集合的值。我找到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作为结果。有什么想法吗?
答案 0 :(得分:1)
不幸的是,如果不要求集合属于特定类型,则无法执行此操作:由于不需要对集合进行排序,因此允许您向Collection
添加项目的唯一方法是add
,插入集合中未指定的位置。
集合迭代器也不允许你修改集合元素:一些迭代器允许你删除当前项目,但没有&#34;替换&#34;关于集合迭代器的方法。
ListIterator<T>
interface提供set(T)
方法,但它会阻止您使用已经有解决方案的List<T>
。
请注意,您的方法也不是防弹的 - 它依赖于传递给它的集合具有可访问的无参数构造函数的假设。