Java笔记------JDK1.8的新特性之Lambda表达式

Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

使用匿名内部类来创建接口的一个子类对象
        MyInterface myInterface = new MyInterface() {
            @Override
            public void show(int a, int b) {
                System.out.println(a + b);
            }
        };
        myInterface.show(10, 20);
  使用Lambda表达式来创建接口的一个子类对象    
		 MyInterface myInterface3 = (x, y) -> System.out.println(x + y);
		Lambda 表达式中的参数类型都是由编译器推断得出的。 Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。 Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的“类型推断”.

函数式接口

函数式接口的定义是: 只包含一个抽象方法的接口,称为函数式接口。
通过 Lambda 表达式来创建该接口的对象,我们可以在任意函数式接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口.

Java中提供的4大核心函数式接口

		函数式接口	                      参数类型	        返回类型	                                  用途
Consumer消费型接口			      T					void				对类型为T的对象应用操作,包含方法:void accept(T t)																											                
Supplier供给型接口				  无	                  T					返回类型为T的对象,包含方法: T get();
Function 函数型接口			  T	                  R				对类型为T的对象应用操作,并返回结果。结果是R类型的对法: R apply(T t);象。包含方
Predicate 断言型接口				  T	              boolean			确定类型为T的对象是否满足某约束,并返回boolean 值。包含方法boolean test(T t);

其他函数式接口

函数式接口	                           参数类型	               返回类型	                                                             用途 
BiFunction				        T U					       R	                   对类型为 T, U 参数应用操作, 返回 R 类型的结果。 包含方法为R apply(T t, U u);

UnaryOperator						 T                         T					对类型为T的对象进行一元运算, 并返回T类型的结果。 包含方法为T apply(T t);
(Function的子接口)
	
BinaryOperator					     T T	                   T					对类型为T的对象进行二元运算, 并返回T类型的结果。 包含方法为T apply(T t1, T t2);
(BiFunction的子接口)

BiConsumer					       	T U	                       void                	对类型为T, U 参数应用操作。 包含方法为void accept(T t, U u)

ToIntFunction												  int
ToLongFunction                         T	                      long					分 别 计 算 int 、 long 、double、 值的函数
ToDoubleFunction											     double

IntFunction							int
LongFunction						    long					    R	               参数分别为int、 long、double 类型的函数
DoubleFunction					   double

方法引用与构造器引用

方法引用其实是Lambda表达式的另一种写法,
当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用.
注意:实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!
方法引用:使用操作符 “ ::” 将方法名和对象或类的名字分隔开来。
如下三种主要使用情况:
 对象::实例方法
 类::静态方法
 类::实例方法
		Consumer consumer=System.out::println;
        BinaryOperator doubleBinaryOperator=Math::max;
        BiFunction function5 = String::concat;
构造器引用
格式:ClassName::new
与函数式接口相结合,自动与函数式接口中方法兼容。可以把构造器引用赋值给定义的方法,与构造器参数列表要与接口中抽象方法的参数列表一致!
		 BiFunction biFunction2 = (s, integer) -> new Student(s, integer);
        BiFunction biFunction3 = Student::new;

你可能感兴趣的:(Java笔记------JDK1.8的新特性之Lambda表达式)