ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java8 Function 函数式接口的妙用

2021-11-29 17:33:38  阅读:281  来源: 互联网

标签:Function 妙用 Runnable System 接口 public println java8 out


Function 函数式接口

使用注解@FunctionalInterface标识,并且只包含一个抽象方法的接口是函数式接口。函数式接口主要分为:

  • Supplier供给型函数:Supplier的表现形式为不接受参数、只返回数据。
  • Consumer消费型函数:Consumer接收一个参数,没有返回值。
  • Runnable无参无返回型函数:Runnable的表现形式为即没有参数也没有返回值。
  • Function有参有返回型函数:Function函数的表现形式为接收一个参数,并返回一个值。

1、处理业务异常

示例:

public void isTrue(String msg){
	// 业务处理...
	boolean conditon;
	if(conditon){
		throw new RuntimeException(msg);
	}
}

Function函数式编程:

 FuncUtil.isTure(conditon).throwMessage("测试异常");

第一步:定义一个抛出异常的函数式接口, 消费型接口:只有参数没有返回值

@FunctionalInterface
public interface ThrowExceptionFunction {

    /**
     * 抛出异常信息
     *
     * @param message 异常信息
     **/
    void throwMessage(String message);
}

第二步:定义一个工具类 FuncUtil.isTure(boolean b)

	/**
     * 处理抛出异常
     */
    public static ThrowExceptionFunction isTure(boolean b) {
        return (errorMessage) -> {
            if (b) {
                throw new RuntimeException(errorMessage);
            }
        };
    }

2、处理if...else...分支操作

示例:

public void isTureOrFalse(){
	// 业务处理...
	boolean a;
	if(a){
		System.out.println("true 逻辑");
	} else {
		System.out.println("false 逻辑");
	}

}

Function函数式编程:

FuncUtil.isTureOrFalse(true)
		.trueOrFalseHandle(() -> System.out.println("true 逻辑"), () -> System.out.println("false 逻辑"));

第一步:定义一个分支处理函数式接口,接口的参数为两个Runnable接口。这两个两个Runnable接口分别代表了为true或false时要进行的操作

@FunctionalInterface
public interface BranchFunction {

    /**
     * 分支操作
     *
     * @param trueHandle 为true时要进行的操作
     * @param falseHandle 为false时要进行的操作
     **/
    void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);
}

第二步:定义一个工具类 FuncUtil.isTureOrFalse(boolean b)

    /**
     * 参数为true或false时,分别进行不同的操作
     */
    public static BranchFunction isTureOrFalse(boolean b) {
        return (trueHandle, falseHandle) -> {
            if (b) {
                trueHandle.run();
            } else {
                falseHandle.run();
            }
        };
    }

3、处理if...else...分支操作,并消费输入参数

示例:

public void isBlankOrNoBlank(String msg){
	if(null==msg || ''==msg){
		System.out.println("msg为空");
	} else {
		System.out.println("msg is:"+msg);
	}

}

Function函数式编程:

FuncUtil.isBlankOrNoBlank("test")
                .presentHandle(System.out::println,
                        ()-> System.out.println("空字符串"));

第一步:定义一个PresentFunction的函数式接口,接口的参数一个为Consumer接口。一个为Runnable,分别代表值不为空时执行消费操作和值为空时执行的其他操作

public interface PresentFunction<T extends Object> {
    /**
     * 值不为空时执行消费操作
     * 值为空时执行其他的操作
     *
     * @param action 值不为空时,执行的消费操作
     * @param emptyAction 值为空时,执行的操作
     **/
    void presentHandle(Consumer<? super T> action, Runnable emptyAction);
}

第二步:定义一个工具类 FuncUtil.isTureOrFalse(boolean b)

    /**
     * 参数为true或false时,分别进行不同的操作
     */
    public static PresentFunction<?> isBlankOrNoBlank(String str) {
        return (consumer, runnable) -> {
            if (str == null || str.length() == 0) {
                runnable.run();
            } else {
                consumer.accept(str);
            }
        };
    }

标签:Function,妙用,Runnable,System,接口,public,println,java8,out
来源: https://www.cnblogs.com/kevin-ying/p/15620413.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有