JAVA 8函数式编程(一) 高阶函数

首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程

                    

函数式编程的核心在高阶函数与偏函数,在JAVA 8中,提供了很多函数式的接口,但跟Python、Javascript的函数相比较,还是存在较大的距离。

首先看一个高阶函数的例子,这里利用局部变量域特性,进行延迟求值,如下:

/** * 输入一定数量的参数,然后统一求值 * @param size 需要求值的个数 * @param fn 求值函数 * @return 函数对象 * 从函数的定义就可以看出,Java函数编程的内在思想还是面向对象 */public IntFunction<Integer> addNum(int size, ToIntFunction<List<Integer>> fn) {    //  声明局部变量,用于存储传入参数    final List<Integer> args = Lists.newArrayList();    return new IntFunction<Integer>() {        @Override        public Integer apply(int value) {            //  没有达到定义的数量之前,不求值            int result = -1;            if(args.size() == size) {                result = fn.applyAsInt(args);            } else {                args.add(value);            }            //  返回结果            return result;        }    };}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

单元测试代码如下:

//  准备测试对象IntFunction<Integer> addFun = this.addNum(3, items -> {    //  利用reduce进行求值    return items.stream().reduce(0, (x, y) -> x + y);});//  方法调用还很生硬,有个莫名其妙的函数名apply,可能会引起业务的误解addFun.apply(1);addFun.apply(2);addFun.apply(3);//  超过了数量不求值int result = addFun.apply(4);//  1+2+3 = 6assertThat(result, IsEqual.equalTo(6));
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结论

JAVA是一门非常优秀的面向对象语言,在函数式编程方面,跟其他函数语言相比,还是显得非常笨重与生涩,并且其内在体现出来的思想,依旧式面向对象,更重要的式,对函数式编程支持的特性较少,例如实现柯里化就非常困难。

           

浏览人工智能教程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值