知识总结-Java8 Stream函数式编程

函数式接口是伴随着Stream的诞生而出现的,Java8Stream 作为函数式编程的一种具体实现,各种操作符配合简洁明了的函数式接口给开发者带来了简单快速处理数据的体验。

函数式接口

什么是函数式接口?简单来说就是只有一个抽象函数的接口。为了使得函数式接口的定义更加规范,java8 提供了@FunctionalInterface 注解告诉编译器在编译器去检查函数式接口的合法性,以便在编译器在编译出错时给出提示。为了更加规范定义函数接口,给出如下函数式接口定义规则:

  • 有且仅有一个抽象函数
  • 必须要有@FunctionalInterface 注解
  • 可以有默认方法

Runable最常见的函数式接口

知识总结-Java8 Stream函数式编程

函数式接口详细介绍

Java8 util.function 包下自带了43个函数式接口,大体分为以下几类:

  • Consumer 消费接口
  • Function 功能接口
  • Operator 操作接口
  • Predicate 断言接口
  • Supplier 生产接口

Consumer消费者接口,就是用来消费数据的。

知识总结-Java8 Stream函数式编程

Consumer 接口中有accept 抽象方法,accept接受一个变量,也就是说在使用这个函数式接口的时候,接口提供数据,只要接收使用就可以了;andThen 是一个默认方法,接受一个Consumer 类型,可以对数据继续进行消费。

Function:提供一种转换功能

知识总结-Java8 Stream函数式编程

Function 接口 最主要的就是apply 函数,apply 接受T类型数据并返回R类型数据,就是将T类型的数据转换成R类型的数据,它还提供了compose、andThen、identity 三个默认方法,compose 接受一个Function,andThen也同样接受一个Function,这里的andThen 与Consumer 的andThen 类似,在apply之后在apply一遍,compose 则与之相反,在apply之前先apply(这两个apply具体处理内容一般是不同的)identity()返回一个输出跟输入一样的Lambda表达式对象下篇详细介绍

Operator可以简单理解成算术中的各种运算操作,当然不仅仅是运算这么简单,因为它只定义了运算这个定义,但至于运算成什么样你说了算。如 IntBinaryOperator

知识总结-Java8 Stream函数式编程

IntBinaryOperator 接口内只有一个applyAsInt 方法,其接收两个int 类型的参数,并返回一个int 类型的结果

Predicate断言、判断,对输入的数据根据某种标准进行评判,最终返回boolean值:

知识总结-Java8 Stream函数式编程

Predicate的test 接收T类型的数据,返回 boolean 类型,即对数据进行某种规则的评判,如果符合则返回true,否则返回false;Predicate接口还提供了 and、negate、or,与 取反 或等,isEqual 判断两个参数是否相等等默认函数。

Supplier生产、提供数据:

知识总结-Java8 Stream函数式编程

本次就介绍到这里,下篇代码实战。


分享到:


相關文章: