我找到了 this关于该主题的线程,我想知道为什么在 Java 中替换列表中的值如此困难。
我的代码看起来很丑:
List<String> stringList = new ArrayList<>();
// ... add some elements
for (int i = 0; i< stringList.size(); ++i) {
if (stringList.get(i).contains("%")) {
stringList.set(i, stringList.get(i).replace("%", backupStorePath));
}
}
这真的是唯一的方法吗?为什么我不能使用 foreach 循环?
for (String command : stringList) {
command = command.replace("%", backupStorePath);
}
这一定是java的“按值复制”问题,String是不可变的,但为什么要这样实现呢?为什么 command
是原始引用的副本而不是原始引用本身?
最佳答案
从 Java-8 开始,您有一个新选项可以使用 List.replaceAll
:
stringList.replaceAll(command -> command.replace("%", backupStorePath));
请注意,for
循环适用于任何 Iterable
,而不仅仅是 List
。并且大多数其他可迭代对象不支持元素替换。因此,即使 Java 设计者决定支持修改,也有必要将 List 和非 List 的情况分开,这肯定会增加一些复杂性。
关于java - Foreach 不能操作一个String 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36077177/