JAVA8新特性之上

Posted owenl-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA8新特性之上相关的知识,希望对你有一定的参考价值。

一、Lambda表达式

Lambda是一个匿名函数。可以写出更简洁、更灵活的代码

//匿名内部类

Runnable r1=new Runnable(){

public void run(){

System.out.println("这是一个匿名内部类");

};

}
//Lambda表达式

Runnable r=()->System.out.println("Lambda表达式");

操作符:   ->    左侧:指定Lambda表达式需要的参数        右侧:指定了Lambda表达式要执行的功能

语法格式:(parameters) ->expression  或   (parameters) ->{statements;}

1.可选类型声明:参数的数据类型可以省略,因为可由编译器推断出,称为“类型推断”(javac根据上下文,在后台推断出数据类型)

2.可选的参数圆括号:一个参数圆括号可以省略,但无参或者多个参数圆括号不可以省略

3.可选的大括号:如果主体只包含了一个语句,则大括号可以省略

4.可选的return关键字:如果主体只有return 返回值这一条语句,则return关键则可以省略。

 

二、函数式接口(Function Interface)

定义:只包含一个抽象方法的,但是可以有多个非抽象方法的接口

作为参数传递Lambda表达式;为了将Lambda表达式作为参数出传递,接受Lambda表达式的参数类型必须是与该Lambda表达式兼容的函数式接口的类型。

JAVA内置的四大核心函数式接口:

1、Consumer<T>消费型接口:对类型为T的对象应用操作,包含方法 void accept(T t);

2、Supplier<T>供给型接口: 返回类型为T的对象,包含方法  T get();

3、Function<T,R>函数型接口: 对类型为T的对象应用操作,并返回R类型的对象,包含方法  R  apply(T t);

4、Predicate<T> 断定型接口:确定类型为T的对象是否满足某约束,包含方法  boolean test(T t);

 

三、方法引用

条件:当要传递给Lambda体(->后面的)的操作,已经有了实现的方法了,就可以使用方法引用。(实现抽象方法的参数列表,必须与方法引用方法的参数列表一致)。

1.方法引用:  对象::实例方法

                     类::静态方法

                     类::实例方法

如: Consumer c1=n->System.out.println(n);       c1.accept("hello");

       等同  Consumer c2=System.out::println;           c2.accept("hello");

2.构造器引用: ClassName ::new 

                     与函数式接口相结合,自动与函数式接口中的方法兼容。可以把构造器引用赋值给定义的方法,与构造器参数列表要接口中的抽象方法的参数列表一致

class A{                  如:   Function<Integer,A> f1=n->new A(n);

  A(n){                   等同 Function<Integere,A< f2=A::new;

  System.out.println(n);

}

}

 

3.数组引用: type[]::new 

     如:Function<Integer,Integer[]> f=n->new Integer[n];

                       等同于   Function<Integer,Integer[]>  f=Integer[]::new ;

 


以上是关于JAVA8新特性之上的主要内容,如果未能解决你的问题,请参考以下文章

Java8新特性终极指南

Java8新特性一张图带你领略Java8有哪些新特性

Java8新特性

Java8新特性

Java8新特性文章

java8新特性总结