美文网首页
java11 实现函数式编程的特征

java11 实现函数式编程的特征

作者: zxbyh | 来源:发表于2020-02-12 12:58 被阅读0次

    java8里面增加了java.util.function.Function和lambda
有了这两个东东 就可以 实现函数式编程的特征了。函数作为变量,高阶函数,匿名函数,内部函数,柯里化 都能搞定。

直接上代码:

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;

public class FuncDemo {

    //--功能函数1
    public static String myFun1(String a){
        return a + "myFun1";
    }

    //--功能函数2
    public static String myFun2(String a){
        return a + "myFun2";
    }

    //--高阶函数,可以吧其他函数作为参数
    public static String myFun(String a,Function<String, String> function){
        String b = a+"myFun";
        return function.apply(b);
    }

    //内部函数的示例
    public static int testInnerFunc(int a){
        Function<Integer,Integer> tmpAbs =
                x -> {
                    if(x<0){
                        return -1*x;
                    }
                    else{
                        return x;
                    }
                };

        System.out.println(tmpAbs.apply(a));
        return tmpAbs.apply(a);
    }

    //--高阶函数,使用泛型,可以吧其他函数作为参数
    public static <T,R> R myFunFanxin(T a,Function<T, R> function){
        T b = (T)(a+"myFun");
        return function.apply(b);
    }

    //--柯里化,函数返回一个函数,并保存状态
    public static Function<String, String> myFunZ(String a){
        String b = a+"myFunZ";
        return x-> b + x;
    }

    //--柯里化,函数返回一个复杂函数,并保存状态
    public static Function<String, String> myFunZex(String a){
        String b = a+"myFunZ";
        return x-> {
                    String tmp = b + x;
                    return tmp + " zz ";
                };
    }

    public static void main(String[] args) throws Exception {
        
        //--将函数放到map里面
        Map<String,Function<String, String>> mapFunc = new ConcurrentHashMap<String,Function<String, String>>();
        mapFunc.put("func1",x->myFun1(x));
        mapFunc.put("func2",x->myFun2(x));

        //直接传入
        System.out.println(myFun("hello",x->myFun1(x)));

        System.out.println(myFun("hello",x->{
                                    String ha = " haahaha ";
                                    return myFun1(x+ha);
                                })
                    );

        //直接传入,泛型函数
        System.out.println(myFunFanxin("hello",(Function<String, String>)(x->myFun1(x))));
        //从map取出来
        System.out.println(myFun("hello",mapFunc.get("func2")));
        //匿名函数穿入
        System.out.println(myFun("hello",System.out.println(myFun("hello", x-> {
                                        return x + "myFunZz";
                                }
                ));

        //函数返回一个函数,并调用
        System.out.println(myFunZ("aa").apply("bb"));

    }

}

相关文章

  • java11 实现函数式编程的特征

        java8里面增加了java.util.function.Function和lambda有了这两个东东 就...

  • 第8章 函数式编程(FP) 《Kotin 编程思想·实战》

    第8章 函数式编程(FP) 8.1 函数式编程概述8.1.1 面向对象编程OOP特征8.1.2 函数式编程FP特征...

  • Scala函数式编程之一——编程范式

    本节的内容的有以下几点:一、编程范式以及为什么要使用函数式编程?二、什么是函数式编程三、函数式编程的特征 一、编程...

  • 函数式编程总结

    什么是函数式编程 函数式编程关心数据的映射,命令式编程关心解决问题的步骤。 函数式编程的特征 特定的入参返回的值是...

  • 一:函数式编程:

    函数式与命令式编程的区别: 命令式编程关注的是怎么做,函数式编程关注的是做什么(由系统选择如何实现),命令式编程:...

  • Java lambda表达式

    1. Java函数式接口 Java实现函数式编程的方式是函数式接口(functional interface),函...

  • iOS链式编程及函数式编程

    提到链式编程和函数式编程,最典型的代表是Masonry 比较完美的实现了函数式编程和链式编程。例如 ``` [vi...

  • 向量化

    python向量化本身做得不是很好需要借助函数式编程或者列表推导式实现 1 列表推导式 2 函数式编程

  • 函数式编程及柯里化概念入门

    函数式编程:与之对应的是命令式编程。命令式编程强调的是实现过程。函数式编程强调的是输入与输出的对应关系 柯里化:C...

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

网友评论

      本文标题:java11 实现函数式编程的特征

      本文链接:https://www.haomeiwen.com/subject/uyoqfhtx.html