美文网首页
java8 Lambda 表达式

java8 Lambda 表达式

作者: 剩下的只有自己 | 来源:发表于2016-09-14 15:07 被阅读17次

函数式接口

函数式接口是指接口中只有一个需要实现的方法
例如Runnable接口:

public interface Runnable {

    /**
     * Starts executing the active part of the class' code. This method is
     * called when a thread is started that has been created with a class which
     * implements {@code Runnable}.
     */
    public void run();
}

Lambda 表达式

基本格式: (形式参数) ->{方法体}
如果要创建上面的Runnable实例,我们以前的写法是:

Runnable r = new Runnable(){
    public void run(){
      System.out.println("线程开始");  
    }
}

使用Lambda写法:

Runnable r = () -> { System.out.println("线程开始");  }

从上面可以看出,可以使用 Lambda 表达式创建一个 Runnable 对象。

作用:对于一个函数式接口,使用Lambda表达式可创建该接口的对象。
问题来了,为什么使用Lambda格式也能创建一个对象呢?
因为Lambda作用的对象是函数式接口,而函数式接口中只定义了一个抽象方法,所以创建该对象只需实现该方法即可,要实现的方法也就可以唯一确定下来,我们只需传入该方法所需的参数以及实现,系统就能自动为我们创建该接口对象了。

形式参数格式

  • 形式参数可已有0个或多个,使用圆括号包裹,如果有多个使用逗号隔开 (arg1 , arg2 , arg3 ...)
  • 形式参数可以声明类型,也可不声明 。例如:(String arg1 , String arg2 ...) 等价于 (arg1 , arg2 ...)
  • 如果只有一个参数,可省略 圆括号。例如:(arg1) ->{ } 等价于 arg1 ->{ }

方法体格式

  • 方法体是包含在一对花括号里面
  • 如果方法体只有一句,花括号可省略。例如 :
Runnable r = () -> { System.out.println("线程开始");  }
Runnable r = () ->  System.out.println("线程开始");  
  • 如果该方法有返回值,在方法体需要返回对应的返回值。

自定义函数式接口

public interface MyInterface {
    public void getId(int id); //该接口中只有一个需要实现的方法
}
//使用Lambda创建该接口的对象
MyInterface interface = (id) ->{ System.out.println("id:"+id) }

在Android Studio 中配置使用Lambda表达式

1. 搭建环境

版本:Android Studio 2.1 + jdk 1.8
查看当前使用的版本:点击 **Help -> About **


出现如下界面:


如需升级Android Studio,参考:http://www.jianshu.com/p/465b0234142b

2. 配置Gradle文件

如果环境搭建好,下面通过配置你app模块下的gradle文件:

android{
  ...
  defaultConfig{
    ...
    jackOptions{    
      enabled true
    }
    ...
  }
  compileOptions{    
    sourceCompatibility JavaVersion.VERSION_1_8    
    targetCompatibility JavaVersion.VERSION_1_8
  }
  ...
}

相关文章

网友评论

      本文标题:java8 Lambda 表达式

      本文链接:https://www.haomeiwen.com/subject/bzdvettx.html