Java8特性

Java 8特性

Lambda表达式

Lambda表达式形式

1.无参数无返回
    ()->{}
2.一个参数无返回
    (x)->{}
3.两个参数无返回
    (x,y)->{}
4.无参数有返回
    ()->{return  1;}
5.一个参数有返回
    (x)->{return x;}
6.两个参数有返回
    (x,y)->{return x+y;}

当没有参数时,( )不能省略,只有一个参数时可以省略。当方法只有一句时,{}可以省略。

Lambda表达式作用

  • 引用方法,可以用lambda表达式指向一个已经实现了的方法。
  • 引用构造方法
  • 创建线程
  • 遍历集合

函数式接口

Consumer 通过accept方法消费变量

Supplier 通过get可以得到其中元素

Function apply方法可以得到跟输入类型不同的元素

Comparator compare方法,比较

方法引用与构造器引用

类::静态方法

类::非静态方法

对象::非静态方法

类名::new 构造器引用

类引用静态方法和对象引用非静态方法要求接口中的抽象方法的形参列表和返回值类型与方法引用的形参列表和返回值相同。

构造器引用会自动根据函数式接口中的参数调用对应的构造函数。

Stream API

创建stream

创建Stream的方式:

  • 集合

    default Stream stream() 返回一个顺序流

    default Stream parallelStream() 返回一个并行流

  • 数组

    Arrays.stream()

  • 通过stream的of方法

  • 创建无限流

    Stream.iterate();
    Stream.generate();
    //示例
    Stream.iterate(0,t->t+2).limit(1).forEach(System.out::println);
    Stream.generate(Math::random).limit(10).forEach(System.out::println);
    

Stream的中间操作

筛选与切片

  • filter 过滤流
  • limit 截断流
  • skip 跳过元素
  • distinct 筛选

映射

  • map接收一个函数作为参数,将元素转换成其他形式或者提取信息(例如获取对象参数),该函数会被应用到每一个元素上,并将其映射成一个流。
  • flatmap接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

排序

  • sorted() 产生一个新流,其中按自然顺序排序
  • sorted(Comparator com) 产生一个新流,其中按比较器顺序排序

Stream终止操作

匹配与查找

  • allMatch(Predicate p) 检查是否匹配所有元素
  • anyMatch(Predicate p) 检查是否至少匹配一个元素
  • noneMatch(Predicate p) 检查是否没有匹配元素
  • findFirst 返回第一个元素
  • findAny 返回当前流中任意元素
  • count 返回流中元素总数
  • max(Comparator c) 返回流中最大值
  • min(Comparator c) 返回流中最小值
  • forEach(Consumer c) 内部迭代

归约

  • reduce(T iden,BinaryOperator b)将流中元素反复结合起来得到一个值,返回T
  • reduce(BinaryOperator b)将流中元素反复结合起来得到一个值,返回Optional

收集

  • collect(Collector c) 将流转换为其他形式,Collector 接口中的方法决定了如何对流执行收集的操作

Optional类

Optional类是一个容器类,保存类型T的值,用来避免空指针异常。

如果isPresent()方法返回true即为值存在,调用get()方法即可得到值。

posted @ 2021-08-20 16:17  约翰小亚当  阅读(38)  评论(0)    收藏  举报