专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java基础学习:Java8的新特性

Java基础学习:Java8的新特性

更新时间:2020-03-31 09:01:14 来源:动力节点 浏览1664次


    现在很多业务方还一直停留在1.7版本,迟迟不升级,为了兼容性,不敢在代码中使用Java8的一些新特性,比如Stream之类的,虽然不能用,但还是要学一下。


Java基础学习:Java8的新特性



  Stream是什么


  Stream是Java8中添加的一个新特性,它与java.io包里的InputStream和OutputStream是完全不同的概念。它借助于Lambda表达式,可以让你以一种声明的方式处理数据,可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。


  StreamDemo


  直接上Demo,感受一下


Java基础学习:Java8的新特性


  Stream 如何工作


  当使用一个流的时候,通常包括三个基本步骤:


  获取一个数据源(source)


  数据转换


  执行操作获取想要的结果


  每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道,如下图所示。


Java基础学习:Java8的新特性


  在Stream中,分为两种操作


  中间操作


  结束操作


  中间操作返回Stream,终端操作返回void或者非Stream结果,在demo中, filter、 map、 sorted都算是中间操作,而 forEach是一个结束操作。


  Stream 如何生成


  创建Stream的方式很多,最常见的是从Collections,List 和 Set中生成

  

Java基础学习:Java8的新特性


  在对象myList上调用方法 stream() 返回一个常规对象Stream。

  也可以从一堆已知对象中生成。

  

Java基础学习:Java8的新特性


  当然了,还有其它方式:


  Collection.stream()


  Collection.parallelStream()


  BufferedReader.lines()


  Files.walk()


  BitSet.stream()


  Random.ints()


  JarFile.stream()


  ....


  常规操作


  forEach


  forEach方法接收一个 Lambda 表达式,用来迭代流中的每个数据

  

Java基础学习:Java8的新特性


  map


  map 用于映射每个元素到对应的结果

  

Java基础学习:Java8的新特性


  filter


  filter 用于通过设置的条件过滤出元素

  

Java基础学习:Java8的新特性


  limit


  limit 用于用于获取指定数量的流

  

Java基础学习:Java8的新特性


  sorted


  sorted 用于对流进行排序

  

Java基础学习:Java8的新特性


  Match


  有三个 match 方法,从语义上说:


  allMatch:Stream 中全部元素符合传入的 predicate,返回 true


  anyMatch:Stream 中只要有一个元素符合传入的 predicate,返回 true


  noneMatch:Stream 中没有一个元素符合传入的 predicate,返回 true


  它们都不是要遍历全部元素才能返回结果。例如 allMatch 只要一个元素不满足条件,就 skip 剩下的所有元素,返回 false。

  

Java基础学习:Java8的新特性


  reduce


  reduce 方法根据指定的函数将元素序列累积到某个值。此方法有两个参数:


  起始值


  累加器函数。


  如果有一个List,希望得到所有这些元素和一些初始值的总和。

  

Java基础学习:Java8的新特性


  collect


  Collectors类中提供了功能丰富的工具方法


  toList


  toSet


  toCollection


  toMap


  ...


  而这些方法,都需要通过 collect 方法传入。

  

Java基础学习:Java8的新特性


  collect 可以把Stream数据流转化为Collection对象,


  骚技巧


  for循环


  除了常规的对象Stream,还有一些有特殊类型的Stream,用于处理基本数据类型int、long和double,它是IntStream、LongStream和DoubleStream。


  比如可以使用IntStream.range()来代替常规的for循环。

  

Java基础学习:Java8的新特性


  随机数


  Random的ints方法可以返回一个随机数据流,比如返回1到100的10个随机数。

  

Java基础学习:Java8的新特性


  大小写转化

  

Java基础学习:Java8的新特性


  Stream 特点


  总之,Stream 的特性可以归纳为:


  无存储


  Stream并不是一种数据结构,它只是某种数据源的一个视图


  安全性


  对Stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新Stream。


  惰式执行


  Stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。


  一次性


  Stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。


  lambda


  所有 Stream 的操作必须以 lambda 表达式为参数


Java基础学习:Java8的新特性


  以上就是动力节点java培训机构的小编针对“Java基础学习:Java8的新特性”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>