jdk1.8新特性 lambda表达式 stream流

文章目录

  • 为什么使用lambda表达式
  • Java8 内置四大核心函数式接口
  • 方法引用
  • Stream API
    • 流到底是什么?
    • 操作流的步骤
      • Stream的三个操作步骤:
        • 创建Stream的方式:
        • 中间操作
        • 终止操作(终端操作)
    • 串行流与并行流
      • 概念
      • 效率
  • Optional
    • 定义
    • 常用方法:

为什么使用lambda表达式

lambda是一个匿名函数,我们可以把lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。

Java8 内置四大核心函数式接口

Consumer : 消费型接口

​ void accept(T t);

Supplier : 供给型接口

T get();

Function : 函数型接口

R apply(T t);

Predicate : 断言型接口

boolean test(T t);

方法引用

若lambda体中的内容有方法已经实现了,我们可以使用“方法引用”(可以理解方法引用是lambda表达式的另一种表现形式)

主要有三种语法格式:

对象::实例方法名

类::静态方法名

类::实例方法名

注:当lambda能被方法引用替代时,idea编译器会有提示。

Stream API

流到底是什么?

流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,流讲的是计算”。

注意:

  1. stream自己不会存储元素

  2. stream不会改变源对象,相反它们会返回一个持有结果的新stream

  3. stream操作是延迟执行的,这意味着它们会等到需要结果的时候才执行

操作流的步骤

Stream的三个操作步骤:

  1. 创建Stream
  2. 中间操作
  3. 终止操作(终端操作)

创建Stream的方式:

  1. Collection系列集合的stream()或parallelStream()
  2. Arrays中的静态方法stream()获取数组流
  3. 通过Stream类中的静态方法of()
  4. 创建无限流:Stream stream = Stream.iterate(0,x->x+2); //从0开始无限加2

中间操作

举例:

filter

limit

skip(n) :扔掉前n个元素

distinct :筛选去重 类对象需要重写hashcode和equals方法才能生效

map:接收lambda。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。

sorted( Comparator comparator ):排序

多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何处理。而在终止操作时一次性全部处理,称为“惰性求值”。

终止操作(终端操作)

allMatch(Predicate predicate) 集合元素全匹配 返回boolean

anyMatch(Predicate predicate) 集合元素任意一个匹配 返回boolean

noneMatch(Predicate predicate) 集合元素不匹配 返回boolean

findFirst() 返回集合中第一个元素

findAny() 并行流返回集合中任意一个元素,串行流返回第一个元素

count() 返回集合大小

max(Comparator comparator) 返回最大元素

min(Comparator comparator) 返回最小元素

collect(Collector collector) 接收一个Collector接口的实现,用于给Stream中元素做汇总的方法

串行流与并行流

概念

顾名思义串行流就是串行执行的流,并行流就是并行执行的流。

并行流就是把内容分割成多个数据块,每个数据块对应一个流,然后用多个线程分别处理每个数据块中的流。底层由Fork/Join框架提供线程池实现并行处理。

效率

并非并行流效率一定高,例如:数组易拆分成多块执行,而链表就很难拆分。且并行流意味着会占用更多的内存,所以应该酌情使用。

Optional

定义

Optional 类 (java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在用 Optional 可以更好的表达这个概念;并且可以避免空指针异常

常用方法:

Optional.of(T t):创建一个 Optional 实例
Optional.empty(T t):创建一个空的 Optional 实例
Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则空实例
isPresent():判断是否包含某值
orElse(T t):如果调用对象包含值,返回该值,否则返回 t
orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回 s 获取的值
map(Function f):如果有值对其处理,并返回处理后的 Optional,否则返回 Optional.empty()
flatmap(Function mapper):与 map 相似,要求返回值必须是 Optional

你可能感兴趣的:(java技术,java,lambda,后端,阿里,面试)