我有一组字符串,我想迭代,并改变所有相等的东西,等于别的东西:
// Set<String> strings = new HashSet()
for (String str : strings) {
if (str.equals("foo")) {
// how do I change str to equal "bar"?
}
}
我尝试过无效的replace()。我也尝试删除“str”并添加所需的字符串,这会导致错误。我该怎么做呢?
答案 0 :(得分:6)
两点:
Set表示“每个只有一个副本”。什么是“改变所有”的东西?你为什么要迭代Set?为什么不这样做呢?
strings.remove( “foo” 的);
strings.add( “条”);
答案 1 :(得分:2)
由于Set
不能有重复,你要做的事情有点奇怪。为什么要迭代?
if (strings.contains("foo")) {
strings.remove("foo");
strings.add("bar");
}
如果线程之间共享strings
集,请确保整个块正确同步。
答案 2 :(得分:1)
迭代时不应更改集。
最好试试这个:
Set<String> strings = new HashSet();
strings.add("foo");
strings.add("baz");
Set<String> stringsNew = new HashSet();
for (String str : strings) {
if (str.equals("foo")) {
stringsNew.add("bar");
} else {
stringsNew.add(str);
}
}
System.out.println(stringsNew);
答案 3 :(得分:0)
如果在迭代过程中更改HashSet,则会得到ConcurrentModificationException。这意味着,您必须首先删除“foo”,然后添加“bar” - 在迭代器之外
答案 4 :(得分:0)
集合是一个不包含重复对象的集合。因此,如果您希望用其他内容“替换”集合中的对象,您可以先将其删除,然后添加您希望“替换”它的字符串。
答案 5 :(得分:0)
// Set<String> s = new HashSet();
for (String str : s) {
if (str.equals("foo")) {
s.remove(str);
s.add("bar");
}
}