在Android中使用lambda表达式

一、参考文章

怒学Java8系列一:Lambda表达式
Android开发中使用lambda表达式
android lambda语法简述

二、Oracle官方介绍

在Android中使用lambda表达式_第1张图片
lambda简介
  • 简单说,就是Lambda提供了一个清晰和简洁的方式来表示一个方法的接口使用的表达式。

三、AS配置使用环境

3.1 Android Studio 2.1.1之前,需要自己导入插件

  • 3.1.1 在 Project 的 build.gradle 中添加如下代码

      dependencies {
            classpath 'me.tatarka:gradle-retrolambda:3.2.0'
      }
    
  • 3.1.2 在 Module 的 build.gradle 中添加如下代码

      // 应用插件
      apply plugin: 'me.tatarka.retrolambda'
    
      // 支持Java8
      android {
          compileOptions {
              sourceCompatibility JavaVersion.VERSION_1_8
              targetCompatibility JavaVersion.VERSION_1_8
          }
      }
    
  • 配置完,编译一下就大功告成

3.2 Android Studio 2.1.1之后(支持lambda插件)

  • 先将SDK更新到最新,然后在 Module 的 build.gradle 文件中添加如下代码

      android {
          defaultConfig {
              jackOptions {
                  // 打开jack编译器
                  enabled true
              }
          }
    
          // 编译支持Java8
          compileOptions {
              sourceCompatibility JavaVersion.VERSION_1_8
              targetCompatibility JavaVersion.VERSION_1_8
          }
      }
    

四、Lambda表达式的使用

在AS中,如果配置了lambda的插件,可以用lambda的地方就会自动变灰色,然后用lambda替换就好了。

语法

语法一:()->{}
其中()和{}可以看情况去掉,()只有一个参数可去掉,{}里逻辑只有一行可去掉

  • 无参数时,直接这么写

        // 创建Runnable对象
        Runnable runnable = () -> {
      
         };
    
  • 有一个参数时,直接 参数名 -> {}

      View.OnClickListener listener = view -> {
      
      };
    
  • 有多个参数时,只需要在()里写上参数名字就可以

      View.OnFocusChangeListener listener = (view, b) -> {
      
      };
    

语法二:::(两个英文冒号)

::是对语法一的简化。

  • 如下代码,可以实现语法一一样的效果

      static class LambdaTest{
          public static void getData(String args1,boolean args2,int args3){
              System.out.println("获取数据了");
          }
      }
    
      interface RequestTask {
          void requestData(String args1,boolean args2,int args3);
      }
    
      public static void main(String args[]){
    
          RequestTask task1 = (args1, args2, args3) -> LambdaTest.getData(args1,args2,args3);
    
          RequestTask task2 = LambdaTest::getData;
      }
    
  • :: 语法有一下几种使用情况

    • 静态方法引用:ClassName::staticMethodName
    • 实例上的实例方法引用:instanceReference::methodName
    • 构造方法引用:ClassName::new

欢迎大家访问我的,博客和GitHub。

你可能感兴趣的:(在Android中使用lambda表达式)