java8新特性函数式接口_Java8新特性 | 四大函数式接口及其扩展接口

什么是函数式接口

在介绍他们之前,我们先看看什么是函数式接口。先打开API文档,查看FunctionalInterface的介绍。

0b2d357ef524

FunctionalInterface

从API中介绍可以看出:

@FunctionalInterface是一个注解,旨在声明接口类型为函数式接口,切只能加在接口上。

函数式接口只允许有一个抽象方法

可以包含使用default声明的方法,因为该方法为普通方法(Java8以后允许在接口中使用default声明一个普通方法)

可以使用Lambada表达式创建函数式接口的实例

注:如果接口符合函数式接口的要求,即使不加@FunctionalInterface注解也会被视为函数式接口

四大函数式接口有哪些

从java.util.function包的介绍可以看出,Java有四大函数式接口,分别为Function、Consumer、Predicate、Supplier,我们来逐个介绍,相信看完后你会对函数式接口有更深的理解。

0b2d357ef524

java.util.function

Function 函数型接口

表示接收一个参数并返回结果的函数。该函数式接口方法为R apply(T t):

为入参泛型

为返回结果泛型

示例代码

示例1:函数式接口可以被new出一个实例来,必须实现其抽象接口

static void functionDemo1() {

Function function = new Function() {

@Override

public String apply(Integer integer) {

return integer.toString() + "程序员节";

}

};

System.out.println("functionDemo1 --> " + function.apply(1024));

}

示例2:可以使用Lambada表达式简化函数式接口

static void functionDemo2() {

Function function = (integer) -> {

return integer.toString() + "程序员节";

};

System.out.println("functionDemo2 --> " + function.apply(1024));

}

示例3:Lambada表达式入参只有一个时,可以不加小括号;

方法体内只有一行代码时可以不加大括号和 return 关键字,直接编写返回结果即可

static void functionDemo3() {

Function function = integer -> integer.toString() + "程序员节";

System.out.println("functionDemo2 --> " + function.apply(1024));

}

示例4:函数式接口做为方法的入参

static void functionDemo4(Integer integer, Function function) {

System.out.println("functionDemo4 --> " + function.apply(integer));

}

public static void main(String[] args) {

functionDemo4(1024, integer -> integer.toString() + "程序员节");

}

Predicate 断定型接口

表示接收一个参数,判断该参数是否满足某约束,并返回boolean值。该函数式接口方法为boolean test(T t)。

为入参泛型

返回boolean型值

示例代码

示例1:new一个Predicate实例

static void predicateDemo1() {

Predicate predicate = integer -> integer == 1024;

System.out.println("predicateDemo1 --> " + predicate.test(1024));

}

示例2:Predicate做为方法的入参

static void predicateDemo2(Integer integer, Predicate predicate) {

System.out.println("predicateDemo1 --> " + predicate.test(integer));

}

public static void main(String[] args) {

predicateDemo2(1024, integer -> integer == 1024);

}

Consumer 消费型接口

接收一个参数但不返回结果,表示为消费者。该函数式接口方法为void accept(T t)

为入参泛型

示例代码

示例1:new一个Consumer实例

static void consumerDemo1() {

Consumer consumer = integer -> System.out.println("consumerDemo1 --> " + integer);

consumer.accept(1024);

}

示例2:Consumer 作为方法的入参

static void consumerDemo2(Integer integer, Consumer consumer) {

consumer.accept(integer);

}

public static void main(String[] args) {

consumerDemo2(1024, integer -> System.out.println("consumerDemo2 --> " + integer));

}

Supplier 供给型接口

与Consumer相反,Supplier只有返回结果,表示为提供者。该函数式接口方法为T get()

为返回结果泛型

示例代码

示例1:new一个Supplier实例

static void supplierDemo1() {

Supplier supplier = () -> 1024;

System.out.println("supplierDemo1 --> " + supplier.get());

}

示例2:Supplier作为方法的入参

static void supplierDemo2(Supplier supplier) {

System.out.println("supplierDemo2 --> " + supplier.get());

}

public static void main(String[] args) {

supplierDemo2(() -> 1024);

}

四大函数式接口总结

为了便于记忆,我们对四大函数式接口进行一个总结:

函数式接口

接口类型

参数类型

返回类型

方法

Function

函数型接口

T

R

R apply(T t)

Predicate

断定型接口

T

boolean

boolean test(T t)

Consumer

消费型接口

T

void

void accept(T t)

Supplier

供给型接口

T

T get()

其他函数式接口(扩展)

在java.util.function包下还包含了其他函数式接口供我们使用,也是对这四大函数式接口进行的一个扩展

函数型接口

函数式接口

参数类型

返回类型

方法

用途

BiFunction

T,U

R

R apply(T t, U u)

接收两个输入参数并产生结果

ToIntBiFunction

T,U

int

int applyAsInt(T t,U u)

接收两个输入参数并返回int类型结果

ToLongBiFunction

T,U

long

long applyAsLong(T t, U u)

接收两个输入参数并返回long类型结果

ToDoubleBiFunction

T,U

double

double(T t, U u)

接收两个输入参数并产生double类型结果

ToIntFunction

T

int

int applyAsInt(T value)

接收一个参数并返回int类型结果

ToDoubleFunction

T

double

double applyAsDouble(T value)

接收一个参数并返回double类型结果

IntFunction

int

R

R apply(int value)

接收一个int类型参数,并返回结果

LongFunction

long

R

R apply(long value)

接收一个long类型参数,并返回结果

DoubleFunction

double

R

R apply(double value)

接收一个double类型参数,并返回结果

IntToDoubleFunction

int

double

double applyAsDouble(int value)

接收一个int类型参数,返回double类型结果

LongToDoubleFunction

long

double

double applyAsDouble(long value)

接收一个long类型参数,返回double类型结果

LongToIntFunction

long

int

int applyAsInt(long value)

接收一个long类型参数,返回int类型结果

IntToLongFunction

int

long

long applyAsLong(int value)

接收一个int类型参数,返回long类型结果

DoubleToIntFunction

double

int

int applyAsInt(double value)

接收一个double类型参数,返回int类型结果

DoubleToLongFunction

double

long

long applyAsLong(double value)

接收一个double类型参数,返回long类型结果

BinaryOperator

T,T

T

T apply(T t1, T t2)

是BiFunction的一个子接口,表示对同一类型的两个参数进行操作,产生同一类型的结果

UnaryOperator

T

T

T apply(T t)

是Function的一个子接口,表示对单个参数操作,产生同一类型的结果

LongBinaryOperator

long,long

long

long applyAsLong(long left, long right)

对两个long值计算并产生long结果

DoubleBinaryOperator

double,double

double

double applyAsDouble(double left, double right)

对两个double值计算并产生double结果

IntUnaryOperator

int

int

int applyAsInt(int operand)

对单个int值操作,产生一个int结果

LongUnaryOperator

long

long

long applyAsLong(long operand)

对单个long值操作,产生一个long结果

DoubleUnaryOperator

double

double

double applyAsDouble(double operand)

对单个double值操作,返回一个double结果

IntBinaryOperator

int,int

int

int applyAsInt(int left, int right)

对两个int值计算并产生int结果

断定型接口

函数式接口

参数类型

返回类型

方法

用途

BiPredicate

T,U

boolean

boolean test(T t, U u)

接收两个输入参数,断定并返回boolean类型结果

IntPredicate

int

boolean

boolean test(int value)

接收一个int参数值,断定并返回boolean类型结果

LongPredicate

long

boolean

boolean test(long value)

接收一个long类型参数,断定并返回boolean类型结果

DoublePredicate

double

boolean

boolean test(double value)

接收一个double参数值,断定并返回boolean类型结果

消费型接口

函数式接口

参数类型

返回类型

方法

用途

BiConsumer

T,U

void

void accept(T t, U u)

接收两个输入参数,不返回结果

ObjIntConsumer

T,int

void

void accept(T t, int value)

接收对象值和int类型参数,不返回结果

ObjLongConsumer

T,long

void

void accept(T t, long value)

接收对象值和long类型参数,不返回结果

ObjDoubleConsumer

T,double

void

void accept(T t, double value)

接收对象值和double类型参数,不返回结果

LongConsumer

long

void

void accept(long value)

消费long类型值,不返回结果

DoubleConsumer

double

void

void accept(double value)

消费double类型值,不返回结果

IntConsumer

int

void

void accept(int value)

消费int类型值,不返回结果

供给型接口

函数式接口

参数类型

返回类型

方法

用途

BooleanSupplier

boolean

boolean getAsBoolean()

表示供给boolean类型的结果

IntSupplier

int

int getAsInt()

表示供给int类型的结果

LongSupplier

long

long getAsLong()

表示供给long类型的结果

DoubleSupplier

double

double getAsDouble()

表示供给double类型的结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值