小新学Java18-【函数式接口】

一、函数式接口

1.1概念

1.2格式

1.3@FunctionalInterface注解

@FunctionalInterface注解
作用:可以检测接口是否是一个函数式接口
是:编译成功
否:编译失败(接口中没有抽象方法或者抽象方法的个数多余1个)

1.4自定义函数式接口

二、函数式编程

2.1 Lambda的延迟执行

性能浪费的日志案例

体验Lambda的更优写法

证明Lambda的延迟

2.2使用Lambda作为参数和返回值

三、常用函数式接口

3.1 Supplier接口

java.util.function.Supplier<T>接口仅包含一个无参的方法:T get()。
用来获取一个泛型参数指定类型的对象数据。
Supplier<T>接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据

3.2练习∶求数组元素最大值

3.3 Consumer接口

抽象方法: accept

java.util.function.Consumer<T>接口则正好与supplier接口相反,
    它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定。

Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据。

Consumer接口是一个消费型接口,泛型执行什么类型,就可以使用accept方法消费什么类型的数据
至于具体怎么消费(使用)需要自定义(输出,计算....)

默认方法: andThen

consumer接口的默认方法andThen
作用:需要两个consumer接口,可以把两个Consumer接口组合到一起,再对数据进行消费
例如:
consumer<String> con1
consumer<String> con2
string s = "hello";
con1.accept( s);
con2.accept(s);

连接两个consumer接口再进行消费
con1.andThen(con2).accept(s);谁写前边谁先消费

3.4练习:格式化打印信息

3.5 Predicate接口

抽象方法:test

java.util.function.Predicate<T>接口
  作用:对某种数据类型的数据进行判街,结果返回一个boolean值
  Predicate接口中包含一个抽象方法:
  boolean test(T t):用来对指定数据类型数据进行判断的方法
    结果:
      符合条件,返回true
      不符合条件,返回false
逻辑表达式:可以连接多个判断的条件
&&:与运算符,有false则false
||:或运算符,有true则true
!:非(取反)运算符,非真则假,非假则真
默认方法
Predicate接口中有一个方法and,表示并且关系,也可以用于连接两个判断条件
default Predicate<T> and(Predicate<? super T> other){
Object.requireNonNull(other);
return(t) ->this.test(t) && other.test(t);
}
方法内部的两个判断条件也是用&&连接起来的
Predicate接口中有一个方法or,表示或者关系,也可以用于连接两个判断条件
default Predicate<T> or(Predicate<? super T> other){
Object.requireNonNull(other);
return(t) ->this.test(t) || other.test(t);
}
方法内部的两个判断条件也是用||连接起来的
Predicate接口中有一个方法negate,也表示取反的意思
default predicate<T> negate() {
return (t) ->!test(t);
}

3.6 练习:集合信息筛选

3.7Function接口

抽象方法:apply

java.util.Function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据,
前者称为前置条件,后者称为后置条件。

Function接口中最主要的抽象方法为:R apply(T t),根据类型T的参数获取类型R的结果。

使用的场景例如:将string类型转换为Integer类型。

默认方法andThen

Function接口中的默认方法andThen:用来进行组合操作

3.8自定义函数模型拼接

posted @ 2022-12-12 20:41  小新好好学Java  阅读(45)  评论(0)    收藏  举报