浅谈Java中的函数式编程

我们知道Java是一门面向对象的高级语言,在Java中对象才是一等的公民。但是为什么从jdk1.8开始也开始通过Lambda表达式以及函数式接口支持函数式编程,这是因为函数式编程的流行以及他切实的在解决一些当前存在的问题。函数式编程为什么流行以及Java中提供了哪些基础的支持,在这篇文章中我们娓娓道来!

函数式编程为什么火了?

编程语言从面向过程到面向对象到现在的面向函数,这三者的概念并没有什么冲突,也可以看出编程的一个发展脉络——编程业务越来越复杂、数据量越来越大、系统受众越来越多、系统越来越复杂。面向过程编程语言缺乏模块化、抽象化和可重用性,难以维护和扩展,不能很好地反映业务需求,程序复杂度高,难以管理和维护。以Java为代表的面向对象语言通过封装性、继承性、多态性是的软件的大规模开发成为可能,IT软件从此迈入工业时代。不过随着软件用户的越来越多,对并发以及大规模数据的处理的要求亦是越来越高。

  1. 内存管理不灵活:对象需要被实例化到内存中才能使用,而随着数据量的增加,需要分配的内存空间也会越来越多;
  2. 缺乏大数据处理所需的数据结构:面向对象的编程语言中,常用的数据结构如数组、链表等虽然可以满足一般情况下的需求,但对于大规模数据的存储和处理却显得力不从心例如缺少哈希表、布隆过滤器、倒排索引、分位统计数、稀疏矩阵
  3. 单线程执行速度慢,因为语言本身在数据处理方面的局限性,无法实现多线程或分布式处理,这使得大规模数据的处理速度受到了很大的限制

好的同志们,上面我们从面向过程鞭尸到面向对象,那就改说说最后以为主角函数式编程到底有哪些大招,最后让我们选择了他:

  1. 简洁清晰:函数式编程使用Lambda表达式和函数式接口,使得代码更加简洁、易读,只需要关注函数的输入、处理和输出,不需要考虑大量的类和对象之间的交互
  2. 高效性:面向函数的编程语言通常利用高阶函数(Higher-order Function)和闭包(Closure)等功能来实现代码复用,减少重复代码的编写,提高代码运行效率。
  3. 函数式编程思想适合并发编程:函数式编程思想很好地契合了多线程编程和分布式计算等并发编程场景不会修改状态,在这些场景下,函数式编程思想能够更好地解决数据同步、共享状态等问题

虽然Java算不上一个对函数式编程完整支持的语言,但是谁让他是我们的第一语言呢,那么他有在函数式编程上做了什么样的努力与支持呢?

Lambda语法糖与它的核心要素

Lambda代表的就是一个函数,函数的核心要素是——函数名、参数列表、返回值类型、访问修饰符、方法体,而语法糖就是在简化这些要素。函数名是为了区分函数但是Lambda表达式通常赋值给了一个变量(eg:Function、Consumer等),或是直接当作其他函数的入参,所以可以省略;如果函数作为一个变量赋值那么对他的访问范围取决于这个变量的权限修饰符,所以也是省略的;返回值类型是可以推到出来的所以可以省略,入参类型如果可以推导出来那么就也可以省略,当然也可以写上;唯一不能省略的是方法体,就算是这个方法体为空。当只有一个入参(可以省略“()”)或是方法体中只有return一句代码时候(可以省略“{}”)又有一些简略的写法。

优雅的函数接口@Function

在工作中我们经常会通过抽象来实现类似于门面的形式,来提升代码的质量以及可扩展性,结合JDK8接口中已经支持的默认函数,如果要是原来抽象类中只有一个需要实现的接口,并且这个接口在不通的场景中有不通的变形,那么通过函数式接口来做,将会是更优雅的。

@FunctionalInterfacepublic interface FunctionInterfaceSelf {    
    Test01 test01 = new Test01();
    void hello();
    default void before(){
            System.out.println("FunctionInterface-before");
    }
    default void exe(){
        before();
        hello();
        test01.test();
    }
}
public class Test {    public static void main(String[] args) {
        FunctionInterfaceSelf functionInterfaceSelf = ()-> System.out.println("hello liu");
        functionInterfaceSelf.exe();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值