1/Lambda表达式使用举例: (o1.o2) ->Integer.compare(o1,o2); 2/Lambda表达式的格式举例: ->:lambda操作符或箭头操作符 ->箭头的左边:lambda形参列表;对应着要重写的接口的抽象方法的形参列表。 ->右边:重写的分方法的方法体:Lambda对应的接口的实现类 、lambda表达式的本质是什么? 一方面作为接口实现类的对象, lambda表达式是一个对象 另一方面,lambda是一个匿名函数。 4函数式接口 4.1什么是函数式接口,为什么需要函数式接口? 如果接口中之声明一个抽象方法,则此接口就成为函数式接口, 只有函数式接口才可以使用lambda表达式 四个常见的函数式接口 : Consumer<T> 消费型接口 对应的抽象方法:void accept(T t) Suppile<T> 供给型接口 : T get() Function<T,R> 函数型接口 :R apply(T t ) Predicate<T> 判断型接口 : 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的所属类