WebFlux响应式编程基础之 2 函数式编程 工具jclasslib bytecode viewer

这里写图片描述
函数式编程:告诉他的功能是什么,而不是告诉他怎么做

命令式编程:怎么去做

函数式编程:不需要关注细节,利用系统已经有的API

使用jdk8自带函数接口的好处
函数接口减少接口定义
函数式接口链式操作

方法引用

 // 方法引用
  Consumer<String> consumer = s -> System.out.println(s);
  Consumer<String> consumer2 = System.out::println;

        consumer.accept("fffffffffffffffff");
        consumer2.accept("fffffffffffffffff");

这里写图片描述

JDK默认会把当前实例传入到非静态方法中,参数名为this,位置是第一个
这里写图片描述

类型推断

变量引用
lambda表达式 – 匿名内部类 final
这里写图片描述
注意:参数传的是值,会有二义性,所以用final;是一个“坑”
这里写图片描述
级联表达式和科里化


import java.util.function.Function;

/**
 * 级联表达式和柯里化
 * 柯里化:把多个参数的函数转换为只有一个参数的函数
 * 柯里化的目的:函数标准化
 * 高阶函数:就是返回函数的函数
 */
public class CurryDemo {

    public static void main(String[] args) {
        // 实现了x+y的级联表达式
        Function<Integer, Function<Integer, Integer>> fun = x -> y -> x
                + y;
        System.out.println(fun.apply(2).apply(3));

        Function<Integer, Function<Integer, Function<Integer, Integer>>> fun2 = x -> y -> z -> x
                + y + z;
        System.out.println(fun2.apply(2).apply(3).apply(4));

        int[] nums = { 2, 3, 4 };
        Function f = fun2;

        for (int i = 0; i < nums.length; i++) {
            if (f instanceof Function) {
                Object obj = f.apply(nums[i]);
                if (obj instanceof Function) {
                    f = (Function) obj;
                } else {
                    System.out.println("调用结束:结果为" + obj);
                }
            }
        }
    }
}

柯里化:把多个参数的函数转换为只有一个参数的函数
柯里化的目的:函数标准化

java值引用

猜你喜欢

转载自blog.csdn.net/dgutliangxuan/article/details/81324386