[重走长征路]Lambda表达式和方法引用

1/Lambda表达式使用举例:
(o1.o2) ->Integer.compare(o1,o2);
2/Lambda表达式的格式举例:
->:lambda操作符或箭头操作符
->箭头的左边:lambda形参列表;对应着要重写的接口的抽象方法的形参列表。
->右边:重写的分方法的方法体:Lambda对应的接口的实现类
、lambda表达式的本质是什么?
一方面作为接口实现类的对象, lambda表达式是一个对象
另一方面,lambda是一个匿名函数。
4函数式接口
4.1什么是函数式接口,为什么需要函数式接口?
如果接口中之声明一个抽象方法,则此接口就成为函数式接口,
只有函数式接口才可以使用lambda表达式
四个常见的函数式接口 :
Consumer 消费型接口 对应的抽象方法:void accept(T t)
Suppile 供给型接口  : T get()
Function 函数型接口 :R apply(T t )
Predicate 判断型接口 : boolean test(T t)
语法总结
箭头的左边:lambda形参列表,参数的类型可以省略、如果参数只有一个,则括号都可以省略,没有参数不可以省略
箭头的右边:lambda方法体,对应的重写的方法的方法体。如果方法体只有一行执行语句 则可以省略掉大括号,如果有ruturn则rturnye必须省略掉
方法引用
Integer :: compare;
方法引用可以看做基于lambda的进一步刻画,
当需要提供一个函数式接口的实例时,我们可以使用lambda表达式提供实例
     当满足一定条件的情况下,我们还可以使用方法引用或者构造器引用。
 方法引用的本质是:
 作为函数式接口的实例。
 格式  ::
 类(对象) :: 方法名
 具体说明:
 1、对象::实例方法
 要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的形参列表和返回值类型都相同,可以考虑使用方法b实现对方法a的覆盖、替换。覆盖和替换即为方法引用
 此方法为非静态方法,需要对象进行调用
 2、类 ::静态方法,
 要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的形参列表和返回值类型都相同,可以考虑使用方法b实现对方法a的覆盖、替换。覆盖和替换即为方法引用
 此方法为静态方法,需要对象进行调用
 3、类:: 实例方法
 要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的返回值类型相同,同时抽象方法a中有n个参数,方法b中有n-1个参数,且抽象方法a的第一个参数作为方法b
 的后n-1个参数与方法b的n-1的参数类型一致。则可以考虑使用b实现对a的替换。覆盖
 注意:此方法b是非静态的方法,需要对象调用。但是形式上写出对象a的所属类

你可能感兴趣的:(数学建模,c++,开发语言)