Java8引入了函数式编程,他对java是一个极大的扩展。Java从此不在是一个单纯的面向对象语言,现在他同时混合了函数式编程。这是巨大的改变,需要我们调整面对对象的编程习惯,以适应这些变化。

但是为什么我们需要去适应这些改变?为什么我们需要花费时间精力上手函数式编程而不是直接用面对对象解决问题?

  • 函数式编程的引入,帮助我们减少业务逻辑和代码的分歧。他允许我们在更高层次更自然的描述业务逻辑。让代码直接描述“你想做什么”,而不是“你想怎样去做”。
  • 许多样板(boilerplates)可以被移除,这会让代码更清晰更简洁。
  • 高阶函数(Higher-order functions)允许我们:  
    • 发送方法到其他方法中。
    • 在其他方法中创建方法。
    • 从其他方法中返回方法。

    这对Java来说是一个巨大的胜利,我们需要发送,创建并返回对象来完成这项工作。我们将能创建更健壮,更集中并且更容易重用的代码。

  • 多亏lambda表达式,现在我们可以实现惰性求值(lazy evalutions)。当发送lambda表达式作为一个方法的参数,Java编译器会在lambda表达式在方法中被调用时才计算他的值。这跟一般的方法参数被直接求职是不一样的。
  • lambda让单元测试变得更加有趣~他允许我们创建简洁,小巧和快速的轻量级单元测试。用lambda我们能够储存测试代码。他允许我们测试各种场景对代码的影响。
  • 探索新的模式。
  • 等等好处。

掌握新的函数式编程对于熟悉面对对象编程的开发者来说是一个挑战,但他应该是一个非常受欢迎的挑战。经过之前的的铺垫,我所要说的是你真的应该学习一门函数式编程语言。他会让你了解到他带来的可能性和能量。我认为这将帮助你在另一个层面了解函数式编程。

因此,掌握函数式编程,加上良好的面对对象思想,能够让你的代码更加牛b!

*英文链接:deadCodeRising

*原创译文

[译]java8新特性:函数式编程(functional programming)的优点的更多相关文章

  1. Java8新特性--函数式编程

    在jdk8中什么是函数式接口: 1.被@FunctionalInterface注解修饰的. 2.接口里边只有一个非default的方法. 满足以上2个条件的即为函数式接口,ps:即使一个接口没有被@F ...

  2. Java8 新特性 —— 函数式编程

    本文部分摘录自 On Java 8 概述 通常,传递给方法的数据不同,结果也不同.同样的,如果我们希望方法被调用时的行为不同,该怎么做呢?结论是:只要能将代码传递给方法,那么就可以控制方法的行为. 说 ...

  3. 关于函数式编程(Functional Programming)

    初学函数式编程,相信很多程序员兄弟们对于这个名字熟悉又陌生.函数,对于程序员来说并不陌生,编程对于程序员来说也并不陌生,但是函数式编程语言(Functional Programming languag ...

  4. Java8 新特性----函数式接口,以及和Lambda表达式的关系

    这里来讲解一下Java8 新特性中的函数式接口, 以及和Lambda 表达式的关系.看到过很多不少介绍Java8特性的文章,都会介绍到函数式接口和lambda表达式,但是都是分别介绍,没有将两者的关系 ...

  5. Java 中的函数式编程(Functional Programming):Lambda 初识

    Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...

  6. 函数式编程 - Functional Programming

    什么是函数式编程 函数式编程是一种编程范式. 编程范式又是什么? 编程范式是一种解决问题的思路. 命令式编程 把程序看作 一系列改变状态的指令: 函数式编程 把程序看作 一系列数学函数映射的组合. i ...

  7. Java8 新特性 函数式接口

    什么是函数式接口   函数式接口是Java8引用的一个新特性,是一种特殊的接口:SAM类型的接口(Single Abstract Method).但是它还是一个接口,只是有些特殊罢了.  函数式接口的 ...

  8. java8新特性-函数式接口详细讲解及案例

    一.函数式接口 1.1 概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口.函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适 ...

  9. java8新特性学习:函数式接口

    本文概要 什么是函数式接口? 如何定义函数式接口? 常用的函数式接口 函数式接口语法注意事项 总结 1. 什么是函数式接口? 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口 ...

随机推荐

  1. laravel5.5契约

    无规矩不成方圆, Laravel 的契约是一组定义框架提供的核心服务的接口,规定了实现该接口的规范. 为什么要使用接口 首先,让我们来看一些高耦合缓存实现的代码.如下: <?php namesp ...

  2. Lambda与LINQ

    Lambda与LINQ写法对比: 上为Lambda 下为LINQ 显示指定列 Students.select(u=>(new {Name=u.Sname,Address=u.Saddress}) ...

  3. 云计算之路-阿里云上:SLB引起的https访问速度慢问题

    自从我们在阿里云SLB上部署了https之后(详见在SLB上部署https遇到的问题及解决方法),陆续有园友向我们反馈登录时速度很慢(登录时是通过https访问),有些园友甚至无法访问登录页面. 而我 ...

  4. Box布局管理

    创建wx.BoxSizer对象时可以指定布局方向: hbox = wx.BoxSizer(wx.HORIZONTAL) 设置为水平方向 hbox = wx.BoxSizer() 默认就是就是水平方向的 ...

  5. leetcode 211. 添加与搜索单词 - 数据结构设计 解题报告

    设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a- ...

  6. Leetcode 664.奇怪的打印机

    奇怪的打印机 有台奇怪的打印机有以下两个特殊要求: 打印机每次只能打印同一个字符序列. 每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符. 给定一个只包含小写英文字母的字符串,你的任 ...

  7. Linux查看端口被占用情形

    查看某端口的占用情况: lsof -i:<端口号> 例如:lsof -i:8080 netstat -apn|grep <端口号> 例如: netstat -apn | gre ...

  8. Spring 笔记(一)概念梳理

    概念 预备知识 1. POJO POJO是Plain Old Java Object的缩写,是软件开发大师Martin Fowler提出的一个概念,指的是一个普通Java类.也就说,你随便编写一个Ja ...

  9. ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 x: 十进制到二进制的转换

    http://acm.ocrosoft.com/problem.php?cid=1316&pid=49 题目描述 把十进制到二进制的转换. 输入 234 输出 11101010 样例输入 23 ...

  10. POJ 3304 Segments | 线段相交

    #include<cstdio> #include<algorithm> #include<cstring> #define N 105 #define eps 1 ...