【发布时间】:2019-08-21 20:49:57
【问题描述】:
我有一张地图,我正在遍历它并使用for 循环修改地图的值。我想知道是否有一种方法可以使用 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());
}
基本上,我想流式传输地图值并设置值并将其作为新地图获取。
【问题讨论】:
-
“使用流修改地图” - 不要这样做/尝试这样做。您不能修改流。流被设计成功能性的:如果你使用过它们,它们就消失了。此外,side-effects in streams are discouraged (See paragraph "side-effects"),因此您不应该尝试修改流的底层数据结构。
-
您可以根据流的结果创建具有更新条目的新地图。但我不确定它是否会比 for-loop 更具可读性。
-
从技术上讲,您可以这样做,但不应更改您正在流式传输的集合,因为这可能会导致意外行为。您可以使用 stream().map().collect() 构建新地图。
-
问题含糊不清。您显示的代码不会创建新地图;它修改了旧地图的值。是否要更改
MyObject实例?您想修改映射以使新对象与其键相关联吗?您想要一个旧值已修改的新地图吗?还是具有新价值观的新地图?
标签: java lambda java-8 java-stream