百木园-与人分享,
就是让自己快乐。

Java_lambda表达式 Stream流 Option类

1 Lambda表达式

1.1 作用

  • 为了简化匿名内部类的书写

1.2 思想

  • 函数式编程思想 : 强调的是结果 , 而不强调过程

1.3 使用的前提

  • Lambda表达式只能作用在函数式接口

函数式接口 : 只有一个抽象方法需要重写的接口 , @FunctionalInterface注解用来校验一个接口是否属于函数式接口

1.4 格式

一般格式 : () -> { }

  • ( ) : 代表的接口中唯一抽象方法的形参,有就写,没有就空着
  • -> : 用箭头指向后面后面要做的事情
  • { } : 代码块,代表方法体的内容,要做的事情

1.5 简化规则

  • 参数类型可以省略,但有多个参数的情况下,不能只省略一个,要省略都的省略

  • 如果参数有且仅有一个,那么小括号可以省略

  • 如果代码块的语句只有一条,可以省略大括号和分号,甚至是return,要省略全部都要省略不能省略某一个

    举例 :
    简化前 : (int a, int b) -> { return a+ b ;}
    简化后 : (a , b) -> a+b

注意 : 三个条件满足哪个就可以简化哪个

2 Stream流

2.1 作用

  • 对数组和集合中元素的筛选和过滤进行简化操作

2.2 获取Stream流

  1. 单列集合

    • Collection接口中的默认方法Stream(),返回一个Stream流 (本质返回的Stream接口的实现类对象,底层实现)
  2. 双列集合

    • 先通过双列集合的方法 keySet() 或 entrySet() 得到单列的键值Set集合或键值对Set集合,然后原理就同单列集合使用Stream流方式类同
  3. 数组

    • Arrays 中的静态方法Stream(),返回一个Stream流
  4. 同类型多个数据
    -Stream.of(T ... t )

2.3 中间方法 (方法的返回值都是Stream流对象,可以链式编程)

  • Stream filter(Predicate predicate )
    作用 : 对流中的数据进行过滤,

    • Predicate 是一个函数式接口,可以用Lambda表达式, 其接口中的方法 : boolean test(T t) 对给定的参数进行判断,返回一个布尔值,true表示此元素留下了,false与之相反
  • Stream limit(long maxSize)
    作用: 截取指定参数个数的数据

    • 截取Stream流中前 maxSize 个元素
  • Stream skip(long n)
    作用 : 跳过指定参数个数的数据

  • static Stream concat(Stream a, Stream b)
    作用 : 合并a和b两个流合成一个流

  • Stream map (Function<T , R> mapper)
    作用 : 将流中的元素类型进行转换

    • Function<T , R> 是函数式接口
    • 泛型T : 表示的流中的元素类型
    • 泛型R : 表示的是把流中的元素转成的目标类型
  • Stream distinct()
    作用 : 去除流中重复的元素,依赖(hashCode和equals方法)

  • Stream sorted()
    作用 : 将流中的元素按照自然排序的规则排序

  • Stream sorted(Comparator<? super T> comparator) 作用 : 将流中的元素按照自定义比较器的规则排序

2.4 终结方法

  • void forEach( Consumer action)
    作用: 对此流的每个元素执行操作,一般用于遍历集合

    • Consumer 是函数式接口, 接口中唯一需要重写的抽象方法 void accept(T t)
    • forEach方法会循环遍历拿到流中的每一个数据,在把每个数据传递给Lambda表达式的形参
    • Lambda表达式 : (String s) -> { sout(s) }
  • long count()
    作用 : 返回此流中的元素的个数

2.5 Stream流的收集操作

  • 由于Stream流中无法直接修改集合,数组等数据源中的数据,所以需要对Stream流进行收集操作
  • R collect(Collector collector) : 此方法只负责收集流中的数据,创建集合添加数据动作需要依赖于参数
  • 工具类Collectors提供了具体的收集方式
    • public static Collector toList():把元素收集到List集合中
    • public static Collector toSet():把元素收集到Set集合中
    • public static Collector toMap(Function keyMapper,Function valueMapper):把元素收集到Map集合中

3 Optional类

3.1 作用

  • 是一个可以为null的容器对象, 只存在则isPresent()方法会返回true,主要用于进行非空判断,主要是一种对空值判断的规范

3.2 API

  • public static Optional ofNullable(T value)
    作用 : 通过指定值构建一个Optional容器,如果值为null则返回Optional.empty 返回值为Optional对象,可以链式编程

  • public boolean isPresent()
    作用 : 如果Optional中存储的对象为null返回的是false,如果对象不为null返回的是true


来源:https://www.cnblogs.com/epicenter/p/16322560.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Java_lambda表达式 Stream流 Option类

相关推荐

  • 暂无文章