在Android中使用lambda表达式

作者: 笑说余生 | 来源:发表于2016-12-11 20:16 被阅读2247次

    一、参考文章

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

    二、Oracle官方介绍

    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

    相关文章

      网友评论

      • 1fa0742ce073:要是来几个列子佐证下就更好了:+1:
      • LiKaiRabbit:2.11之前导入是在 mavenCentral()仓库里,你没有写上。

      本文标题:在Android中使用lambda表达式

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