stream流的注意事项

HeJin小于 1 分钟函数式编程stream流

  • 惰性求值:如果没有终结操作,中间操作是不会得到执行的。
  • 流是一次性的:一旦一个流对象经过一个终结操作之后,这个流就不能再被使用。
  • 不会影响原数据:我们在流中可以对数据做很多处理,但是正常情况下是不会影响原来集合中的元素。

流的一次性

public static void main(String[] args) {
    List<Author> authors = getAuthors();

    Stream<Author> stream = authors.stream();

    stream.forEach(author -> System.out.println(author.getName()));

    Optional<Author> first = stream.findFirst();

}
蒙多
亚拉索
易
易
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
	at com.sanfen.StreamDemo01.main(StreamDemo01.java:28)

Process finished with exit code 1