我正在努力实现以下目标
public class MyObject {
Map<String, String> myMap;
}
public class MyOtherObject {
List<MyObject> myObjects;
}
我希望能够执行以下操作
for (MyObject myObject: myObjects) {
Map<String,String> newMap = new Hashmap<String,String>();
for (Map.Entry<String, String> entry : myObject.getMyMap.entrySet() {
newMap.put(entry.key + "a" , entry.value)
}
}
如何避免这种嵌套循环?
最佳答案
- 对于您当前的解决方案,您需要移动
newMap
在循环外部声明,否则您将在循环的每次迭代中创建一个新映射,并且该映射不会包含您期望的结果。 - 您的 map 实例化也有拼写错误,请将
Hashmap
更改为HashMap
。
为了避免嵌套循环,您可以创建 entrySet
的流实例,然后使用 collect
对流执行归约操作。
Map<String, String> copy = myObject.getMyMap.entrySet()
.stream()
.collect(Collectors.toMap(p -> p.getKey() + "a", Map.Entry::getValue));
如果您想将所有映射从指定 map 复制到另一个 map ,那么正如 svasa
在评论中建议的那样,您可以执行以下操作:
newMap.putAll(myObject.getMyMap.entrySet().stream().collect(Collectors.toMap(p -> p.getKey() + "a", Map.Entry::getValue)));
关于java - 如何避免嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44314202/