在Android中使用lambda表達式

hllf123 7年前發布 | 6K 次閱讀 安卓開發 Android開發 移動開發

一、參考文章

怒學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 } }</code></pre> </li>

  • 配置完,編譯一下就大功告成

  • </ul>

    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
        }
      

      }</code></pre> </li> </ul>

      四、Lambda表達式的使用

      在AS中,如果配置了lambda的插件,可以用lambda的地方就會自動變灰色,然后用lambda替換就好了。

      語法

      語法一:()->{}

      其中()和{}可以看情況去掉,()只有一個參數可去掉,{}里邏輯只有一行可去掉

      • 無參數時,直接這么寫

        // 創建Runnable對象
            Runnable runnable = () -> {

         };</code></pre> </li> 
        

      • 有一個參數時,直接 參數名 -> {}

        View.OnClickListener listener = view -> {

        };</code></pre> </li>

      • 有多個參數時,只需要在()里寫上參數名字就可以

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

        };</code></pre> </li> </ul>

        語法二:::(兩個英文冒號)

        ::是對語法一的簡化。

        • 如下代碼,可以實現語法一一樣的效果

          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;
          

          }</code></pre> </li>

        • :: 語法有一下幾種使用情況

          • 靜態方法引用:ClassName::staticMethodName
          • 實例上的實例方法引用:instanceReference::methodName
          • 構造方法引用:ClassName::new
          • </ul> </li> </ul>

             

            來自:http://www.jianshu.com/p/ef6cbf5ade71

             

 本文由用戶 hllf123 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!