上一篇文章我介绍了Java 8的Stream API 详解Java8特性之Stream API,忘记补充一点了,Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream(这样可以链式编程)。
看下面例子
@Test
public void test() {
List<Integer> list = Arrays
.asList(
1,
2,
3,
4,
5,
6);
list.stream()
.filter(x
-> x
> 3)
.forEach(System
.out
::println);
System
.out
.println(
list);
}
输出结果
4
5
6
[1, 2, 3, 4, 5, 6]
可以看出虽然从流中筛选出大于3的元素,但是数据源list的内容并未被改变,这就好像是我们复制一个文件,而复制出来的文件进行任意修改都不会影响到原始文件。