集合流,stream的运用和lamdba的涉及

来源:互联网 发布:ubuntu挂载网络硬盘 编辑:程序博客网 时间:2024/06/05 00:58

本文旨在探究lamdba表达式的使用以及jdk1.8中流的使用,且格式完全参照[csdn的markdown格式提示][6]

在搞懂lambda之前,我们需要搞清楚什么叫做函数式接口

所谓函数式接口,就是接口中只有一个抽象方法的接口,这种类型的接口也称为SAM接口,即Single
Abstract Method interfaces。

看看lamdba表达式的语法规范

() -> function();

第一个()内是参数别表,->为java中lamdba表达式符号(其他语言的lamdba表达式不太清楚),后面为函数,在java中就是方法,使用方式与平常使用相同。

stream的运用

在jdk1.8的文档中,我们看到Stream接口中有提供了很多的方法,但是,jdk中不是所有方法都是常用方法,下面我来罗列一下我们常用到的方法(按字母表顺序)

  1. collect():对流中的元素以Collector<-T,A,R>进行收集,其中T为元素输入类型,A为可变累积类型,R为返回结果类型,原谅我这里没有深究,Collectors工具类中给了很多工作中经常使用到的规则,如List、Map、Set等,可以直接使用
  2. count():返回流中的元素个数
  3. filter():将流以给定的谓词(这里指的是函数式接口,可以使用lamdba表达式)匹配,得出结果流,这里我个人通俗地理解为对流的过滤,将流中的的元素以给定的函数进行过滤,得出结果流
  4. foreach():对流中的每个元素进行函数操作,这里同样可以写lamdba表达式
  5. limit():返回以流中的元素组成的流,数量不超过给定的值
  6. map():返回以给定函数结果组成的流,这里说明一下map方法与filter方法的区别,filter方法中的函数返回boolean值以判断次元素的去留,filter后的元素与之前的元素类型是一致的,而map是以给定函数的运行结果为元素的,这就意味着map方法返回的流中的元素与之前不尽相同了
  7. sorted():返回以流中元素自然排序的顺序流,可以给定排序方式,同样可以写lamdba表达式来描述
  8. toArray():返回流中元素组成的数组,数组类型为Object,这里也可以给定返回类型

这里贴一些代码图片:
filter的使用


map的使用


collect的使用


最后在对集合流做一个总结吧:之前我们使用集合时,都是需要先遍历集合,然后处理集合中的元素进行处理,而Collection接口给的方法不多,无法以动态的方式处理集合,而jdk1.8中提供的函数式编程(这里解释一下,给我这样的小白科普写函数式编程,我理解的函数式编程就是指将封装好的函数交给需要使用此函数的程序执行,有点像java中的接口编程,但是java中接口编程需要定义方法名称以及传递参数的类型、数目等,而jdk1.8提供的函数式编程无须定义这些,我们只需要告诉这个接口调用哪个方法,以什么方式调用就可以了(以lamdba表达式的形式,也许这就是c和java的区别吧)),函数式编程可以将如何操作元素的接口暴露出来,然后在需要使用该接口时是需要告诉这个接口的实现方法就可以了,这里就是lamdba表达式只能写在函数式接口的原因了,多个抽象方法无法匹配对应方法。

原创粉丝点击