Java8新特性-Stream

前言

最近在学软件测试,自己选择了一个相对比较新的测试框架Junit5,结果想要去做参数化的测试,发现与Junit4已经不同的我一脸懵逼。发现自己对lambda表达式之类的新特性一无所知。在了解lambda表达式的时候恰好接触到了Stream就先写一篇文章来讲一下我对Stream的理解。

什么是Stream?

Stream是流,是类似于迭代器的一种东西,但又不同于迭代器。因为迭代器的长度是有限的,而流的长度是无限的。

为什么要有流?

我认为Stream与lambda表达式这类东西是属于语法糖的东西,这类语法不会影响语言的功能,但是可以让我们的代码更加精简,实现起来也更为容易。

引入流可以算是Java对函数式编程的一种支持,而函数式编程的代码往往更为精简。

如何去获取流?

流的获取方法有很多,我接触的也比较有限,我可能最近使用的都是类似于获取迭代器的方法。当然还有直接构造流的方法。

流的操作核心

1.Intermediate

一个流可以有多个Intermediate,这些操作的核心就是映射。何谓映射,其实就是在函数式编程里面的思想,在函数式编程里面,值是不会发生改变的,也就是某种意义上的没有变量。而是对数值进行映射,得到一个新的量。比如说我们要进行i=i+1;,我们进行的实际上不是对不存在的。我们应该去产生一个新的变量,通过函数x+1,得到我们想要的值。

2.Terminal

一个流只能进行一次Terminal操作,这类操作就是foreach()count()之类,就好像输入流一样,读进来就不能再动了。流流过去以后就不能再进行操作了。

一个简单的流操作举例

在这里我们很轻松的就将list中的字母进行了Up操作,就是通过map操作来实现的,然后再精光collect操作,将流转为list。

流给我们带来了什么?

1.加强了对集合的操作。

2.提高编程效率和程序可读性。

3.提升并发时的效率(我还暂时没接触到)。

 

 

打赏