码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA8新特性之上

时间:2018-11-25 01:25:13      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:参数类型   cat   runnable   apply   自动   包含   out   数据类型   ram   

一、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新特性之上

标签:参数类型   cat   runnable   apply   自动   包含   out   数据类型   ram   

原文地址:https://www.cnblogs.com/OwenL-Y/p/10014151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!