我有一个 map ,我正在迭代它并使用 for
循环修改 map 的值。我想知道是否有办法使用 Java 8 流来做到这一点。
这是我的代码:
Map<String,MyObject> myMap = getResultMap();
for (Map.Entry<String, MyObject> entry : myMap.entrySet()) {
entry.getValue.setName(getName());
entry.getValue.setId(getId());
entry.getValue.setDept(getDept());
entry.getValue.isValid(isValid();
entry.getValue.setPipeLine(getPipeLine());
}
基本上,我想流式传输 map 值并设置值并将其作为新 map 获取。
最佳答案
您可以获得一个新的 Stream
或作为流操作的结果生成一个新的 Map
,但 Stream
无法改变数据(但您可以创建一个 lambda 来执行您想要的任何操作)。例如,使用您的代码示例:
Map<String, MyObject> myMap = getResultMap();
Map<String, MyObject> newMap = myMap.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry ->
{
entry.getValue().setName(getName());
entry.getValue().setId(getId());
entry.getValue().setDept(getDept());
entry.getValue().setValid(isValid());
entry.getValue().setPipeLine(getPipeLine());
return entry.getValue();
}
));
但是不要更新Stream
内的共享可变变量!它会产生很多问题。
最好创建 MyObject
类的新实例,而不是修改 myMap
:
Map<String, MyObject> newMap = myMap.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry ->
{
MyObject myObject = new MyObject();
myObject.setName(getName());
myObject.setId(getId());
myObject.setDept(getDept());
myObject.setValid(isValid();
myObject.setPipeLine(getPipeLine());
return myObject;
}
));
关于java - 使用流修改 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599018/