Stream里面的惰性如何去理解,我没办法理解这种惰性可以带来性能的提升。有没有简洁容易让人明白的表达呢。
所谓“惰性”,说白了就是按需加载。
这就和一个懒惰的人一样:比如有的人吃完饭,就把所有的碗洗一遍,不管下次吃饭用几个。懒惰的人是,要吃饭了,然后从脏碗中挑出一个洗一洗,要盛菜了,再洗一个。
如果不用Stream,而是用字节数组,那么就是开辟缓冲区,然后把所有传过来的数据全部填充进去。
但是如果我们只需要读这些数据的前几个呢,这么做就浪费了。
流则是按需加载的,从前面往后读,如果读取几个,就关闭了,不再读,那么后面的数据就既不要加载,也不要存储。
Stream在Java中,目前有两个概念,一个是文件读取的,另一个是Java8的Stream
1.文件读取,这个很好理解,针对大型文件的读取,我们可以一次性读取到内存中,然后计算,
也可以通过诸如realLine或者buffer形式的缓冲流进行读取。但是一次性读取,可能会导致内存
不足,那么OOM问题随之而来。而通过realLine或者buffer形式的缓冲流进行读取,内存占
用就没那么明显,合理的缓冲,我们可以较小内存的依赖,如果你确实问是文件流,那么这么:
https://www.baeldung.com/java-read-lines-large-file 可能会帮你
2.Java8为了满足函数式编程,不仅提供了函数支持,而且还提供了Stream API,通过对计算
以及循环等进行抽象,我们可以仅仅通过forEach、filter、map、flatMap等操作符,实现复杂
for循环。
我想要你的分数,差1分下载本书。哈哈