Man*_*el 1 java dictionary java-stream
有人可以解释一下为什么第一个代码示例没有保存我在地图上用.map所做的更改,但第二个代码示例呢?
第一个代码示例:
stringIntegerMap.entrySet().stream()
.map(element -> element.setValue(100));
Run Code Online (Sandbox Code Playgroud)
第二个代码示例:
stringIntegerMap.entrySet().stream()
.map(element -> element.setValue(100))
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
另外,为什么第二个代码示例只打印值而不是整个元素(键+值)?
您的流操作是惰性评估的.
如果您不调用诸如forEach(或collect等)之类的终端操作,则实际上不会发生流式传输,因此您setValue不会执行.
请注意,通常建议您修改正在流式传输的集合/地图.
最后,API Map.Entry#setValue就在这里.您会注意到该方法返回:
与条目对应的旧值
因此,在执行映射操作时,生成的流包含值.
这里的一些来源(搜索"流操作和流水线",以及关于"非干扰"的部分可能会有所帮助).