函数式接口在Java中的应用与实践

1. 引言

函数式接口是Java 8引入的一个概念,它是指只有一个抽象方法的接口。函数式接口可以被用作lambda表达式的目标类型。在函数式接口中,除了抽象方法外,还可以有默认方法和静态方法。

函数式接口的引入是为了支持函数式编程,函数式编程是一种编程范式,强调将计算过程看作是数学函数的求值。函数式编程可以使代码更简洁、易读,并且便于并发编程。

函数式接口在Java中的使用广泛,它可以作为方法参数、返回类型、变量或成员变量的类型。通过使用函数式接口,可以实现更简洁、灵活的代码编写,提高代码的可读性和维护性。

Java 8中提供了一些常用的函数式接口,例如Function、Predicate、Consumer等,这些接口可以用来实现不同的功能,例如转换、过滤和消费数据。同时,Java 8还提供了Lambda表达式的语法糖,使得使用函数式接口更加方便。

总而言之,函数式接口是Java 8引入的一个重要概念,它支持函数式编程,使得代码更简洁、易读,并且便于并发编程。在实际开发中,函数式接口的使用频率很高,能够提高代码的可读性和可维护性。

2. 特点

  1. 单一抽象方法:一个真正的函数式接口只能有一个抽象方法。
  2. 默认方法和静态方法:可以有任意数量的默认方法或静态方法。
  3. @FunctionalInterface 注解:此注解用于声明一个接口预期作为函数式接口使用。虽然不是强制性的,但它有助于编译器检查是否确实只有一个抽象方法。

3. 创建函数式接口

下面是一个简单的函数式接口示例:

1. 创建函数式接口

// 声明是函数式接口,同时校验是否满足函数式接口条件
@FunctionalInterface
public interface MyFunctionalInterface {
    // 有且仅有一个抽象方法
    void method();

    // 可以加默认方法
    default void defaultMethod() {
        System.out.println("default method called.");
    }

    // 可以加静态方法
    static void staticMethod() {
        System.out.println("Static method called.");
    }
}

 2. 调用函数式接口

public static void main(String[] args) {
    // 使用Lambda表达式方法体
    MyFunctionalInterface obj = () -> System.out.println("Hello, Lambda!");
    // 调用方法
    obj.doSomething();
}

3. 测试功能

4.  内置函数式接口

4.1 四大核心函数式接口

函数式接口

称谓

参数类型

用途

Consumer<T>

消费型接口

T

对类型为T的对象应用操作,包含方法: void accept(T t)

Supplier<T>

供给型接口

返回类型为T的对象,包含方法:T get()

Function<T, R>

函数型接口

T

对类型为T的对象应用操作,并返回结果。结果是R类型的对象。包含方法:R apply(T t)

Predicate<T>

判断型接口

T

确定类型为T的对象是否满足某约束,并返回 boolean 值。包含方法:boolean test(T t)

4.2 其它接口 

4.2.1 消费型接口

消费型接口的抽象方法特点:有形参,但是返回值类型是void

接口名

抽象方法

描述

BiConsumer<T,U>

void accept(T t, U u)

接收两个对象用于完成功能

DoubleConsumer

void accept(double value)

接收一个double值

IntConsumer

void accept(int value)

接收一个int值

LongConsumer

void accept(long value)

接收一个long值

ObjDoubleConsumer<T>

void accept(T t, double value)

接收一个对象和一个double值

ObjIntConsumer<T>

void accept(T t, int value)

接收一个对象和一个int值

ObjLongConsumer<T>

void accept(T t, long value)

接收一个对象和一个long值

4.2.2 供给型接口

这类接口的抽象方法特点:无参,但是有返回值

接口名

抽象方法

描述

BooleanSupplier

boolean getAsBoolean()

返回一个boolean值

DoubleSupplier

double getAsDouble()

返回一个double值

IntSupplier

int getAsInt()

返回一个int值

LongSupplier

long getAsLong()

返回一个long值

4.2.3 函数型接口 

这类接口的抽象方法特点:既有参数又有返回值

接口名

抽象方法

描述

UnaryOperator<T>

T apply(T t)

接收一个T类型对象,返回一个T类型对象结果

DoubleFunction<R>

R apply(double value)

接收一个double值,返回一个R类型对象

IntFunction<R>

R apply(int value)

接收一个int值,返回一个R类型对象

LongFunction<R>

R apply(long value)

接收一个long值,返回一个R类型对象

ToDoubleFunction<T>

double applyAsDouble(T value)

接收一个T类型对象,返回一个double

ToIntFunction<T>

int applyAsInt(T value)

接收一个T类型对象,返回一个int

ToLongFunction<T>

long applyAsLong(T value)

接收一个T类型对象,返回一个long

DoubleToIntFunction

int applyAsInt(double value)

接收一个double值,返回一个int结果

DoubleToLongFunction

long applyAsLong(double value)

接收一个double值,返回一个long结果

IntToDoubleFunction

double applyAsDouble(int value)

接收一个int值,返回一个double结果

IntToLongFunction

long applyAsLong(int value)

接收一个int值,返回一个long结果

LongToDoubleFunction

double applyAsDouble(long value)

接收一个long值,返回一个double结果

LongToIntFunction

int applyAsInt(long value)

接收一个long值,返回一个int结果

DoubleUnaryOperator

double applyAsDouble(double operand)

接收一个double值,返回一个double

IntUnaryOperator

int applyAsInt(int operand)

接收一个int值,返回一个int结果

LongUnaryOperator

long applyAsLong(long operand)

接收一个long值,返回一个long结果

BiFunction<T,U,R>

R apply(T t, U u)

接收一个T类型和一个U类型对象,返回一个R类型对象结果

BinaryOperator<T>

T apply(T t, T u)

接收两个T类型对象,返回一个T类型对象结果

ToDoubleBiFunction<T,U>

double applyAsDouble(T t, U u)

接收一个T类型和一个U类型对象,返回一个double

ToIntBiFunction<T,U>

int applyAsInt(T t, U u)

接收一个T类型和一个U类型对象,返回一个int

ToLongBiFunction<T,U>

long applyAsLong(T t, U u)

接收一个T类型和一个U类型对象,返回一个long

DoubleBinaryOperator

double applyAsDouble(double left, double right)

接收两个double值,返回一个double结果

IntBinaryOperator

int applyAsInt(int left, int right)

接收两个int值,返回一个int结果

LongBinaryOperator

long applyAsLong(long left, long right)

接收两个long值,返回一个long结果

 4.2.4 判断型接口

这类接口的抽象方法特点:有参,但是返回值类型是boolean结果。

接口名

抽象方法

描述

BiPredicate<T,U>

boolean test(T t, U u)

接收两个对象

DoublePredicate

boolean test(double value)

接收一个double值

IntPredicate

boolean test(int value)

接收一个int值

LongPredicate

boolean test(long value)

接收一个long值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值