1. 什么是Stream?
Stream作为java8中增加的一个非常重要特性,为我们提供了对集合的一系列操作,简化了对集合元素的操作复杂度,让我们可以更加专注与业务逻辑的实现,stream的操作一般需要和Lambda表达式进行结合使用,达到简便的操作及清晰的代码。
Stream的使用主要分两部分:
- 惰性求值 (of, map, flatmap, filter…)
- 及早求值 (reduce, max, min, collect…)
2. 什么是惰性求值和及早求值?
判断一个操作是惰性求值还是及早求值可以通过操作的返回值进行判断,如果返回的是一个stream,那么就是惰性求值,否则就是及早求值。
惰性求值的特点:
- 惰性求值的操作并没有对集合元素进行实际的遍历,只有在进行及早求值的时候才开始遍历元素。
- 惰性求值返回的是stream对象。
3. 如何使用Stream函数对集合进行操作?
在日常的使用中,我们都是惰性求值和及早求值进行配合,一般来说,先对集合进行惰性求值,最后再对生成的新stream对象进行及早求值。
大家可以把stream的操作过程想像成一个生产线,我们的集合元素从生产线的一头进入,然后在生产线的另一头重新生成集合或者元素,进入的过程就是生成一个steam对象,即第一次惰性求值,出来的时候是一个及早求值的过程,将steam重新生成集合或者元素,然后中间的所有操作都是惰性求值,中间的惰性求值过程相当于对生产线进行各种配置(排序,过滤,映射等等)。
4. 使用Stream进行集合操作实战练习:
下面的代码主要使用了stream的几个主要函数:
public class StreamTest {
public static void main(String[] args) {
StreamTest t = new StreamTest();
t.addOperation();
t.findMax();
t.getArtistInfo();
t.albumFilter();
t.albumFlat