java8 Lambda 表达式

2016-09-14  本文已影响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作用的对象是函数式接口,而函数式接口中只定义了一个抽象方法,所以创建该对象只需实现该方法即可,要实现的方法也就可以唯一确定下来,我们只需传入该方法所需的参数以及实现,系统就能自动为我们创建该接口对象了。

形式参数格式

方法体格式

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
  }
  ...
}
上一篇下一篇

猜你喜欢

热点阅读