什么是Stream

Stream被翻译为流,它的工作过程像将一瓶水导入有很多过滤阀的管道一样,水每经过一个过滤阀,便被操作一次,比如过滤,转换等,最后管道的另外一头有一个容器负责接收剩下的水。

示意图如下:

首先通过source产生流,然后依次通过一些中间操作,比如过滤,转换,限制等,最后结束对流的操作。

Stream也可以理解为一个更加高级的迭代器,主要的作用便是遍历其中每一个元素。

Stream作用

Stream API主要是通过Lambda表达式完成,极大的提高了程序的效率和可读性,同时Stram API中自带的并行流使得并发处理集合的门槛再次降低,

使用Stream API编程无需多写一行多线程的大门就可以非常方便的写出高性能的并发程序。使用Stream API能够使你的代码更加优雅。

流的另一特点是可无限性,使用Stream,数据源可以是无限大的。

List<Student> result=new ArrayList<>();
for(Student student:students){
 
    if(student.getAge()>18){
        result.add(student);
    }
}
return result;

 

使用Stream,我们可以参照上面的流程示意图来做,首先产生Stream,然后filter过滤,最后归并到容器中。

转换为代码如下:

return students.stream().filter(s->s.getAge()>18).collect(Collectors.toList());
  • 首先stream()获得流
  • 然后filter(s->s.getAge()>18)过滤
  • 最后collect(Collectors.toList())归并到容器中