欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java之lambda表达式,

来源: javaer 分享于  点击 24790 次 点评:24

Java之lambda表达式,


#0 预备知识

0.1函数式接口

定义:只有一个抽象方法的接口,例如Comparator接口:

public Interface Comparator<T>{
    int compare(T first, T second);
}

值得注意的是, 函数式接口可以有别的非抽象的方法

0.2.方法引用(Method Reference)

定义:本质上是lambda的简写

System.out::println

等同于

x->
    System.out.println(x)

 方法引用的格式:

1.object::instanceMethod   =  提供方法参数的lambda

2.Class::staticMethod   =  提供方法参数的lambda

3.Class::instanceMethod   =第一个参数会成为方法的目标

0.3构造器引用

和方法引用类似,不过特指引用构造器,方法名都是new

int[]::new 
等价于
x->new int[x]

#1 感性认识lambda表达式

(String first, String second)
    ->first.length()-second.length()

#2 lambda表达式的定义&存在的意义

lambda表达式是一个代码块,或者说一个带参数的表达式,可以看做是一个函数,而不是一个对象,以后可以执行一次或多次。lambda表达式可以代替只有一个抽象方法的接口对象。

lambda表达式由三部分组成:

1.参数

2.一个代码块

3.自由变量的值(外围自由变量的值,此变量必须为实际上的最终变量)

#3 语法

1.若表达式只有一行,可以省略{},否则不能省略;

2.若表达式没有参数,就写空括号();

3.如果编译器可以推导出参数类型,就可以省略参数类型;

(first, second)
    ->first.length()-second.length();

4.如果表达式只有一个参数,且编译器可以推导出这个参数的类型,则可以省略参数和();

event->
    System.out.println("hello")

5.无需指定返回值类型,编译器可以自己推导出.

#4使用

可以用lambda表达式创建函数式接口对象

例如创建新线程:

传统的方式:

new Thread(new Runnale(){
        public void run(){
            System.out.println("使用匿名类创建新Thread");
        }
    }).start();

若使用lambda表达式

new Thread(()->

        System.out.println("使用lambda创建thread");
        
    ).start();

可以看出使用lambda表达式取代内部类,十分简洁明了

#5注意事项

lambda表达式只能赋值给明确的函数式接口对象,例如目标类型不能是Object类。

下面的操作会导致编译器报错:The target type of this expression must be a functional interface

Object obj=()->System.out.println("hello_lambda");

 

相关文章

    暂无相关文章
相关栏目:

用户点评