Java:函数式接口(Functional Interface)实现将函数作为方法参数传递

简介: Java:函数式接口(Functional Interface)实现将函数作为方法参数传递

1、函数式接口简介

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

使用场景:将函数作为方法参数传递

2、函数式接口案例

1、定义函数式接口

package com.example;
// @FunctionalInterface注解 检查一个接口是否是一个函数式接口
@FunctionalInterface
public interface MyFunctionInterface {
    void show();
}

2、使用函数式接口

package com.example;
public class Demo {
    // 定义一个方法以函数式接口作参数
    public static void test(MyFunctionInterface myFunctionInterface) {
        myFunctionInterface.show();
    }
    public static void main(String[] args) {
        // 1.使用匿名内部类的方式
        MyFunctionInterface myFunctionInterface = new MyFunctionInterface() {
            @Override
            public void show() {
                System.out.println("Hello 1");
            }
        };
        test(myFunctionInterface);
        // 2.直接传递匿名内部类
        test(new MyFunctionInterface() {
            @Override
            public void show() {
                System.out.println("Hello 2");
            }
        });
        // 3.使用Lambda表达式的方式使用函数式接口
        test(() -> System.out.println("hello 3"));
    }
}

3、常用函数式接口

1、消费型接口

定义

// 有参无返回值
@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

示例

package com.example;
import java.util.function.Consumer;
public class Demo {
    // 定义一个方法以函数式接口作参数
    public static void test(Consumer<Integer> consumer, Integer value) {
        consumer.accept(value);
    }
    public static void main(String[] args) {
        test((value) -> System.out.println(value), 20);
        // 20
    }
}

2、供给型接口

定义

// 无参有返回值
@FunctionalInterface
public interface Supplier<T> {
    T get();
}

示例

package com.example;
import java.util.function.Supplier;
public class Demo {
    public static Integer test(Supplier<Integer> supplier) {
        return supplier.get();
    }
    public static void main(String[] args) {
        Integer value = test(() -> 20);
        System.out.println(value);
        // 20
    }
}

3、函数型接口

定义

// 有参有返回值
@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

示例

package com.example;
import java.util.function.Function;
public class Demo {
    public static Integer test(Function<Integer, Integer> function, Integer value) {
        return function.apply(value);
    }
    public static void main(String[] args) {
        Integer value = test((x) -> x * 10, 2);
        System.out.println(value);
        // 20
    }
}

参考

java核心技术,函数式编程接口详解

Java 8 函数式接口


相关文章
|
2天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
8天前
|
Java 开发者
探索 Java 的函数式接口和 Lambda 表达式
【4月更文挑战第19天】Java 中的函数式接口和 Lambda 表达式提供了简洁、灵活的编程方式。函数式接口有且仅有一个抽象方法,用于与 Lambda(一种匿名函数语法)配合,简化代码并增强可读性。Lambda 表达式的优点在于其简洁性和灵活性,常用于事件处理、过滤和排序等场景。使用时注意兼容性和变量作用域,它们能提高代码效率和可维护性。
|
8天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
10天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
17 0
|
14天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
35 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
17天前
|
存储 Java
java接口和内部类
java接口和内部类
|
4天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
23 0
|
1天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
1天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
2天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
6 0