Java8关于Function接口

1 函数式接口简介和学习地址

函数式接口可以被隐式转换为 lambda 表达式。

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

参考地址1:菜鸟教程
参考地址2:B站视频

2 两种常见的函数式接口

2.1 Runnable:执行接口,不接收参数,也无返回结果。

JDK中关于Runnable的定义

2.2 Consumer:作为消费接口,接收一个参数,无返回结果。

JDK中关于Consumer的定义

3 初识

3.1 定义Function接口

  • 首先是接口Interface
  • 其次接口上方写上注解@FunctionalInterface
  • 定义抽象方法[函数式接口只能有且仅有一个方法]
3.1.1 定义ThrowExceptionClassFunction接口
package functioninterfacedemo.util;

/**
 * @author klxz
 * @description ThrowExceptionClass
 * @date 2024/4/7
 */
@FunctionalInterface
public interface ThrowExceptionClass {
    /**
     * throwMessage
     *
     * @param message message
     */
    void throwMessage(String message);
}
3.1.2 定义BranchHandleDemoFunction接口
package functioninterfacedemo.util;

/**
 * @author klxz
 * @description BranchHandleDemo
 * @date 2024/4/7
 */
@FunctionalInterface
public interface BranchHandleDemo {
    /**
     * trueOrFalseHandler
     *
     * @param trueHandler trueHandler
     * @param falseHandler falseHandler
     */
    void trueOrFalseHandler(Runnable trueHandler, Runnable falseHandler);
}
3.1.3 定义PrentOrElseDemoFunction接口
package functioninterfacedemo.util;

import java.util.function.Consumer;

/**
 * @author klxz
 * @description PrentOrElseDemo
 * @date 2024/4/7
 */
@FunctionalInterface
public interface PrentOrElseDemo<T extends Object> {
    /**
     * presentOrElseHandler
     *
     * @param consumer consumer
     * @param falseAction falseAction
     */
    void presentOrElseHandler(Consumer<? super T> consumer, Runnable falseAction);
}

3.2 定义service类

  • 命名为service目的是让大家明白这个是执行类
3.2.1 isTrue方法
  • 调用isTrue方法
  • 接收control传入的参数flag
  • 如有异常则进行Function接口ThrowExceptionClass 的处理
3.2.2 isTrueOrFalse方法
  • 调用isTrueOrFalse方法
  • 接收control传入的参数flag
  • 如有异常则进行Function接口BranchHandleDemo的处理
  • Runnable不需要接收参数,直接调用run()执行
  • 如果flag为true,则进行trueHandler.run()处理
  • 如果flag为false,则进行falseHandler.run()处理
3.2.3 isPresent方法
  • 调用isPresent()方法
  • 接收control传入的参数obj
  • 如有异常则进行Function接口PrentOrElseDemo的处理
  • Consumer需要接收一个参数,但不返回结果
  • 如果obj不为null则进行action.accept(obj)处理
  • Runnable不需要接收参数,直接调用run()执行
  • 如果obj为null则进行trueHandler.run()处理
package functioninterfacedemo;

import functioninterfacedemo.util.BranchHandleDemo;
import functioninterfacedemo.util.PrentOrElseDemo;
import functioninterfacedemo.util.ThrowExceptionClass;

/**
 * @author klxz
 * @description 工具类
 * @date 2024/4/7
 */
public class ServiceClass {
    public static ThrowExceptionClass isTrue(boolean flag) {
        return (message) -> {
            if (!flag) {
                System.out.println("current is " + message + "!");
            }
        };
    }

    public static BranchHandleDemo isTrueOrFalse(boolean flag) {
        return ((trueHandler, falseHandler) -> {
            if (flag) {
                trueHandler.run();
            } else {
                falseHandler.run();
            }
        });
    }

    public static PrentOrElseDemo<?> isPresent(String obj) {
        return (action, runnable) -> {
            if (obj != null) {
                action.accept(obj);
            } else {
                runnable.run();
            }
        };
    }
}

3.3 定义control类

分别调用service中的三个方法查看运行结果

package functioninterfacedemo;

/**
 * @author klxz
 * @description 练习函数式接口的demo
 * @date 2024/4/7
 */
public class ControlClass {
    public static void main(String[] args) {
    	// 传参为true,调用throwMessage方法
        ServiceClass.isTrue(true).throwMessage("current is false!");
        // 传参为false,调用throwMessage方法
        ServiceClass.isTrue(false).throwMessage("current is false!");


		// 传参为true,调用trueOrFalseHandler方法
        ServiceClass.isTrueOrFalse(true).trueOrFalseHandler(() -> {
            System.out.println("this is true handler!");
        }, () -> {
            System.out.println("this is false handler!");
        });
		// 传参为false,调用trueOrFalseHandler方法
        ServiceClass.isTrueOrFalse(false).trueOrFalseHandler(() -> {
            System.out.println("this is true handler!");
        }, () -> {
            System.out.println("this is false handler!");
        });


		// 传参不为null,调用presentOrElseHandler方法
        ServiceClass.isPresent("hello world!").presentOrElseHandler(System.out::println, () -> {
            System.out.println("current object is null!");
        });
		// 传参为null,调用presentOrElseHandler方法
        ServiceClass.isPresent(null).presentOrElseHandler(System.out::println, () -> {
            System.out.println("current object is null!");
        });
    }
}

4 总结

通过Function可以很优雅的写出业务逻辑代码,让代码看起来清爽~

持续学习中,有问题可以在评论区留言交流。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值