博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 函数式编程和Lambda表达式
阅读量:5123 次
发布时间:2019-06-13

本文共 2037 字,大约阅读时间需要 6 分钟。

  1、Java 8最重要的新特性

  Lambda表达式、接口改进(默认方法)和批数据处理。

 

  2、函数式编程

  本质上来说,编程关注两个维度:数据和数据上的操作。

  面向对象的编程泛型强调让操作围绕数据,这样可以实现以类为单位的重用,当为类添加新的数据类型时,原有代码无需修改。

  函数式编程是一种不同的编程模型,它以操作(函数)为中心,强调变量不变性。函数式编程的准则是不依赖外部的数据,也不改变外部数据的值。这一特性满足了多核并行程序设计的需求,因此能简化并行程序开发。

  函数式编程用函数来表达所有的概念,完成所有的操作。面向对象编程中,把对象当作参数传递,而在函数式编程中,函数可以作为其他函数的参数传递,返回值也可以是函数。

  从开发者角度看,函数式编程不支持赋值操作,一个函数的执行只会返回一个值or函数,不会有任何副作用,所以看上去,一个函数就是一个大表达式。

 

  3、Lambda表达式使用场合

  Lambda表达式实现了函数式编程,能够让开发者将程序代码如同数据一样使用。方法可以被当作参数传递到其他方法内,如同对象实例或数。

  使用场合:通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

  Lambda表达式可以用于替换广泛使用的内部匿名类实现回调功能,用于事件响应器。

 

  4、Lambda表达式语法

  Lambda表达式是一个能够作为参数传递的匿名函数对象,它没有名字,有参数列表、函数体、返回类型,也可以抛出异常。它的类型是函数接口(Functional Interface)。

  语法:  

  1)  形式参数:即参数列表,就是函数式接口里方法的参数。

  2) 向右的箭头(->):起分割作用。

  3)  方法体。表达式或者代码块,是函数式接口中方法的实现。(可以return返回值)

  

  5、什么是函数式接口

  函数式接口指仅包含一个抽象方法的接口。

  java.lang.Runnable、java.util.Comparator是典型的函数式接口

  

  6、函数式接口和Lambda表达式的联系

  Lambda表达式需要一个函数式接口作为其对应类型,而它的方法体就是函数接口的实现。每一个该接口类型的Lambda表达式都会被匹配到该接口的抽象方法。

 

  7、函数式接口的对象怎么创建

  • 标准方法创建;
  • 使用Lambda表达式创建。(可以简化代码)
    /*Lambda表达式创建函数式接口的对象*/interface Converter{    Integer convert(String from);}Converter converter=(from)->Integer.valueOf(from);Integer integer=converter.convert(“123”);

  8、自动类型推到

  上面的代码中,编译器知道Converter只有一个方法convert(),所以convert()方法肯定对应表达式(from)->Integer.valueOf(from);

  由于convert()只有一个参数,所以from一定是String类型的。

 

  9、方法引用

  Lambda表达式到底意味着什么?任何一个Lambda表达式都可以被当作某个函数接口中的唯一抽象方法的匿名描述符。

  可以使用某个类的某个具体方法代表这个描述符,即为方法引用。这样,就无须绑定方法引用到某个实例,直接将实例作为功能接口的参数进行传递。

  方法的引用通过::符号来实现,方法引用被认为是和Lambda表达式一样的,可用于功能接口所适用的地方。

/*相当于让Converter接口的方法等价于Integer::valueOf()*/Converter converter=Integer::valueof();Integer integer=converter.convert(“123”);

 

  

  10、新特性——接口的默认方法(default)

  接口的默认方法是为了解决接口演化问题,即新版本中对接口进行修改,会导致早期版本的代码无法运行。因为接口中的方法必须被实现,若在接口中添加新方法,可能进行大量重构。所以,若往一个接口中添加新的方法,可以提供该方法的默认实现。

  有了默认方法,对已有的接口使用者来说,代码可以继续运行。新的代码可以继续使用该方法,也可以重写默认的实现。

interface Formula{    double calculate(int a);/*新增的方法,提供一个默认实现*/     default double sqrt (int a) {    return Math.sqrt(s);    }}

 

转载于:https://www.cnblogs.com/bigbigbigo/p/8422579.html

你可能感兴趣的文章
myeclipse插件安装
查看>>
浙江省第十二届省赛 Beauty of Array(思维题)
查看>>
NOIP2013 提高组 Day1
查看>>
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>
大家在做.NET B/S项目的时候多用什么设技术啊?
查看>>
Java SE和Java EE应用的性能调优
查看>>
Android设计模式系列--原型模式
查看>>
免费的论文查重网站
查看>>
C语言程序第一次作业
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
了解node.js
查看>>
想做移动开发,先看看别人怎么做
查看>>
Eclipse相关集锦
查看>>
虚拟化架构中小型机构通用虚拟化架构
查看>>
继承条款effecitve c++ 条款41-45
查看>>