java stream使用终端操作变异数据

时间:2017-06-20 03:52:35

标签: java java-8 java-stream

Java Stream Cheat Sheet

通过这个Java流的备忘单 - 我理解Java流不能改变数据。

例如,在下面使用的代码中,我是否正确地说 - 使用forEach终端操作数据正在变异?

List<Foo> fooList=new ArrayList<>();
fooList.stream()
.filter(foo-> return foo.getSomeBoolean())
.forEach(foo->{
  foo.setSomeBoolean(false);
});

我很困惑,forEach终端操作可能会对数据产生副作用但不会改变数据?

有人可以解释一下foreach如何在这里改变数据吗?

1 个答案:

答案 0 :(得分:1)

你不能改变fooList,但可以使用终端操作对元素执行副作用。正如备忘单所说,流是管道线,而不是数据结构。你不能改变不是数据结构的东西,但你可以操纵流经管道的各个元素。