JAVA 8函数式编程(一):高阶函数
来源:互联网 发布:数据存储技术 编辑:程序博客网 时间:2024/05/16 07:09
函数式编程的核心在高阶函数与偏函数,在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; } };}
单元测试代码如下:
// 准备测试对象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));
结论
JAVA是一门非常优秀的面向对象语言,在函数式编程方面,跟其他函数语言相比,还是显得非常笨重与生涩,并且其内在体现出来的思想,依旧式面向对象,更重要的式,对函数式编程支持的特性较少,例如实现柯里化就非常困难。
阅读全文
0 0
- JAVA 8函数式编程(一):高阶函数
- 高阶函数式编程
- 函数式编程与高阶函数
- 5函数式编程---高阶函数
- 高阶函数(一)
- java中的函数式编程(一)
- Python (九)函数式编程,高阶函数
- 5函数式编程---高阶函数sorted()
- 函数式编程(1):高阶函数
- Kotlin函数式编程(二) 高阶函数
- Java函数式编程(一)
- Python函数式编程(高阶函数 <map/reduce filter sorted> 返回函数 匿名函数 装饰器 偏函数)
- JS(一)高阶函数
- Scala:Function(高阶函数式编程)
- Java函数式编程(一)(转载)
- python 学习笔记---函数式编程之高阶函数
- 8.函数式编程和高阶函数
- python 函数式编程和高阶函数的概念
- VB.net
- 53. Maximum Subarray
- 11. Container With Most Water题解
- Linux网络端口
- 查验身份证
- JAVA 8函数式编程(一):高阶函数
- 写测试类时没有@Test注解
- c#——三层登陆
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次
- 50个必备的实用jQuery代码段+ 可以直接拿来用的15个jQuery代码片段
- LintCode(两数组的交)
- POJ 2154 Color Polya定理+欧拉函数优化
- c语言
- 扫描二维码+生成二维码