美文网首页
函数式接口 ~ java8特性

函数式接口 ~ java8特性

作者: 喏喏2021 | 来源:发表于2022-02-09 22:32 被阅读0次

1. 介绍

函数式接口,我们只看后缀,它就是个接口,区别就是它只有一个抽象的方法,并且在实例化这个接口时,我们可以用lambda表达式来表示,或是更简洁的方法引用。

2. 分类

函数式接口主要分为以下4大类:

1)Function 正常函数,一个入参,一个出参
Function.png

还有一些常用的函数接口
BiFunction<T,U,R> 两个入参,一个出参
DoubleFunction<R> 一个double入参,一个出参
DoubleToIntFunction 一个double入参,一个int出参
DoubleToLongFunction 一个double入参,一个long出参
IntFunction<R> 一个int入参,一个出参
IntToDoubleFunction 一个int入参,一个double出参
IntToLongFunction 一个int入参,一个long出参
LongFunction<R> 一个long入参,一个出参
LongToDoubleFunction 一个long入参,一个double出参
LongToIntFunction 一个long入参,一个int出参
ToDoubleBiFunction<T,U> 两个入参,double出参
ToDoubleFunction<T> 一个入参,double出参
ToIntBiFunction<T,U> 两个入参,一个int出参
ToIntFunction<T> 一个入参,一个int出参

2)Consumer 消费,一个入参
Consumer.png

BiConsumer<T,U> 两个入参,无出参
DoubleConsumer double入参,无出参
IntConsumer int入参,无出参
LongConsumer long入参,无出参

3)Supplier 生产,无参,一个出参
Supplier.png

BooleanSupplier 无入参,boolean出参
DoubleSupplier 无入参,double出参
IntSupplier 无入参,int出参
LongSupplier 无入参,long出参

4)Predicate 预示 一个入参,布尔出参
Predicate.png

BiPredicate<T,U> 两个入参,boolean出参
DoublePredicate double入参,boolean出参
IntPredicate int入参,boolean出参
LongPredicate long入参,boolean出参

3.示例

package basic;

import java.util.function.BiFunction;

public class FunctionTest {
    static class Car {
        public static void drive(BiFunction bi) {
            System.out.println(bi.andThen(a->{return a+" 去旅行了!";}).apply("司机甲", "汽车乙"));
        }
    }
    
    public static void main(String[] args) {
        Car.drive((a,b)->{return a+" 驾驶着 "+b;});
    }
}
//输出
司机甲 驾驶着 汽车乙 去旅行了!

这里面有一个BiFunction的andThen方法,可以先看一下源码:

default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t, U u) -> after.apply(apply(t, u));
    }

这里可以看到,先执行2个参数的apply方法,把这个结果作为入参再执行Function方法,
也就是说,调用完andThen方法后,得到了一个新的组合的BiFunction函数接口,这时并没有开始执行,
到.apply("司机甲", "汽车乙")方法时,开始真正执行。-_-

相关文章

  • JAVA8函数式接口学习

    JAVA8函数式接口 函数式接口是java8的一种新特性,函数式接口定义了且只定义了一个抽象方法!该接口非常有用,...

  • 函数式接口

    函数式接口 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! 函数式接口(Functional...

  • java 各版本新特性介绍

    java8 新特性 Java8 主要包括的新特性有: 函数式接口如果一个接口只有一个抽象方法,那么该接口就成为一个...

  • JAVA8新特性之函数式接口使用与学习

    函数式接口 函数式接口是Java8引用的一个新特性,是一种特殊的接口 SAM类型的接口(Single Abstra...

  • Lambda表达式

    Lambda表达式是Java8的一个新特性,是函数式接口的一种体现。所谓函数式接口(functional inte...

  • Java 8 新特性 - 函数式接口 Functional In

    Java8的其中一个新特性,函数式接口。 什么是函数式接口?有且仅有一个抽象方法的接口(不包括默认方法、静态方法以...

  • Java 8 Funciton、Consumer、Predica

    一、简述 Funciton、Consumer、Predicate是Java8中的新特性。他们都是函数式接口,位于j...

  • 浅谈函数式接口

    函数式接口是 Java8 引入的一个新特性,是一种特殊的接口:SAM类型的接口(Single Abstract M...

  • 常见面试题:java8有什么新特性?

    常见面试题:java8有什么新特性? 主要有以下这些新特性: lambda 表达式,经常配合函数式接口使用,可以有...

  • java8 新特性

    java8 新特性 核心内容 Lambda:函数式接口编程,简化代码量,类型上下文自动推断。 Stream Api...

网友评论

      本文标题:函数式接口 ~ java8特性

      本文链接:https://www.haomeiwen.com/subject/upawkrtx.html