码迷,mamicode.com
首页 > 数据库 > 详细

lamdba表达式

时间:2019-08-28 01:15:01      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:ram   基本   highlight   new   输出   getname   语法   err   自动识别   

1、lamdba有何用


java8出现了lamdba表达式,类似js的箭头函数。有何用?

看个例子 java8之前 一个List的排序,如下的写法是使用匿名类来实现Compartor接口

public static void main(String[] args){
        List<String> strList = Arrays.asList("yf1","yf2");
        strList.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
    }

lamdba出现后 ,可以改成如下形式

public static void main(String[] args){
        List<String> strList = Arrays.asList("yf1","yf2");
        strList.sort((o1, o2) -> o1.compareTo(o2));
    }

是否很简洁 可读性跟好。

  

2、如何使用lamdba表达式


基本语法,如下 

param -> expression

(param1,param2) -> expression

(type param1,type param2) -> expression

(param1,param2) -> {statements;...}

特点:

a. 省略了接口名称,方法。

b. 参数类型也不是必须的,可以省略

c. 单个语句可以省略{} 

d. 方法体内容,一般不建议有多行,3行以内

 

其中b c缺省的类型 java会在编译时 进行类型推断,根据上下文信息自动识别其类型

(java是强类型语言)

 

3、函数式接口


 

函数式接口 : 只有一个抽象方法的接口

只有函数式接口才可以使用lamdba表达式。

 

注意java8 可以定义有默认实现的方法,这个跟lamdba不冲突,看如下例子

定义函数式接口:

@FunctionalInterface
public interface LamInterface {
    void print(String name);
    default String getName(){
        return "yf";
    }
}

测试:

public class LamdbaYf {
    public static void testLamdbs(LamInterface lamInterface){
        lamInterface.print(lamInterface.getName());
    }

    public static void main(String[] args){
        testLamdbs((name)->System.out.println("my name is = "+name));
    }
}

输出:my name is = yf

 

4、@FunctionalInterface注解


这个注解标识此接口是函数式接口,如果不是,如定义了2个抽象方法。编译会提示报错的

 

但不是说函数式接口必须使用此注解,即使不使用@FunctionalInterface注解,功能依然不受影响。

 

5、lamdba表达式与匿名类区别


1、this的使用 

     匿名类实际还是一个类,在匿名类中使用this 表示的是这个匿名类实例本身。

     而在lamdba中使用this ,是指调用lamdba的类实例

2、lamdba是通过invokedynamic jvm虚拟机指令执行的

 

6、方法引用


TODO

lamdba表达式

标签:ram   基本   highlight   new   输出   getname   语法   err   自动识别   

原文地址:https://www.cnblogs.com/yangfei629/p/11421553.html

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