流的使用一般包括三件事:
    1)一个数据源(如集合)来执行一个查询;
    2)一个中间操作链,形成一条流的流水线;
    3)一个终端操作,执行流水线,并能生成结果。
    流的流水线背后的理念类似于构建器模式。
    在构建器模式中有一个调用链用来设置一套配置(对流来说这就是一一个中间操作链),接着是调用built方法(对流来说就是终端操作)。
    流让你从外部迭代转向内部迭代,这样就用不着显式地管理数据集合的迭代(外部迭代)了。
    你可以使用支持filter和collect操作的Stream API (内部迭代)管理对集合数据的迭代。
    你只需要将筛选行为作为参数传递给filter方法就行了。
    这种处理数据的方式很有用,因为你让Stream API管理如何处理数据。
    这样Stream API就可以在背后进行多种优化。
    此外,使用内部迭代的话,Stream API可以决定并行运行你的代码。
    这要是用外部迭代的话就办不到了,因为你只能用单一线程挨个迭代。