day13【Stream流,方法引用】

今日内容

  • Stream流
  • 方法引用

jdk1.8 函数式编程思想

  • 强调的是做什么,而不是怎么做.

Stream流

  • 简化了集合和数组的操作.
  • Stream不是IO体系当中的流对象.

流式思想概述

  • 对一组数据进行多过滤,筛选,统计..
  • Stream流并不会存储元素
  • Stream流是一个来自数据源的元素队列并支持聚合操作
    数据源:可以是集合或数组等等.

基本特征

  • Pipelining:中间操作都会流对象本身.
  • 内部迭代: Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
    外部迭代:以前对集合遍历都是通过Iterator或者For-Each的方式,显式的在集合外部进行迭代, 这叫做外部迭代。

特点

1.流对象只能被消费一次
2.只能内部迭代遍历

使用步骤

1.获取流
2.拼接模型(整体操作)
3.获取结果

获取Stream流

集合获取

  • list.Stream();
  • set.Stream();

Map集合

  • map.keySet().Stream();
  • map.valuse().Stream();

数组

  • Strea.of(数组);
    Stream只能接受引用类型,int[]数组相当于一个参数!!!

Stream流中的常用方法

终结方法

  • 返回值类型不再是Stream自身的方法.foreach() 和 chount()

延迟方法

  • 返回值类型仍然是Strea 对象,支持链式调用.

foreach() 遍历

  • 终结性方法
  • 底层依赖于Consumer接口,用来消费数据,用来做数据的遍历.
    增强for依赖的是迭代器,foreach是一个方法
  • 该方法不保证元素的逐一消费动作是有序执行的
    • 串行是有序的(逐个处理,单管) Stream(String) one = list.Stream();
    • 并行是无序的(将任务分解,多管) Stream(String) two = list.paralleStream();

filter() 过滤

  • 延迟方法
  • 参数:Predicate接口 -> test()

map() 映射,转换类型

  • 延迟方法
  • 参数:Function接口 -> apply()

count() 统计

  • 终结方法
  • 返回值类型:long

limit() 截取

  • 延迟方法
  • 参数是一个long类型(n),返回的流只保留前n个.
    如果参数大于集合长度,返回所有元素.传入负数会报异常.

skin() 跳过

  • 延迟方法
  • 参数是一个long类型(n),返回的流只保留n到最后一个.(与limit相反)

concat() 拼接

  • 静态方法
  • 将两个流整合成一个流.返回一个拼接后的流.

方法引用

概念

  • 引用对象中的方法,来完成具体的操作,从而对(Lambda表达式的书写)再次进行简化.

格式

  • 对象::方法名

猜你喜欢

转载自blog.csdn.net/weixin_42651836/article/details/81324832