在Android中使用lambda表达式

hllf123 8年前
   <h3>一、参考文章</h3>    <p><a href="/misc/goto?guid=4959728924751667564" rel="nofollow,noindex">怒学Java8系列一:Lambda表达式</a></p>    <p><a href="/misc/goto?guid=4959728924844661133" rel="nofollow,noindex">Android开发中使用lambda表达式</a></p>    <p><a href="/misc/goto?guid=4959728924936942399" rel="nofollow,noindex">android lambda语法简述</a></p>    <h3>二、Oracle官方介绍</h3>    <p><img src="https://simg.open-open.com/show/3ec39e6e3b76a239da17609650677e8a.png"></p>    <p>lambda简介</p>    <ul>     <li>简单说,就是Lambda提供了一个清晰和简洁的方式来表示一个方法的接口使用的表达式。</li>    </ul>    <h3>三、AS配置使用环境</h3>    <p>3.1 Android Studio 2.1.1之前,需要自己导入插件</p>    <ul>     <li> <p>3.1.1 在 Project 的 build.gradle 中添加如下代码</p> <pre>  <code class="language-java">dependencies {          classpath 'me.tatarka:gradle-retrolambda:3.2.0'    }</code></pre> </li>     <li> <p>3.1.2 在 Module 的 build.gradle 中添加如下代码</p> <pre>  <code class="language-java">// 应用插件    apply plugin: 'me.tatarka.retrolambda'      // 支持Java8    android {        compileOptions {            sourceCompatibility JavaVersion.VERSION_1_8            targetCompatibility JavaVersion.VERSION_1_8        }    }</code></pre> </li>     <li> <p>配置完,编译一下就大功告成</p> </li>    </ul>    <p>3.2 Android Studio 2.1.1之后(支持lambda插件)</p>    <ul>     <li> <p>先将SDK更新到最新,然后在 Module 的 build.gradle 文件中添加如下代码</p> <pre>  <code class="language-java">android {        defaultConfig {            jackOptions {                // 打开jack编译器                enabled true            }        }          // 编译支持Java8        compileOptions {            sourceCompatibility JavaVersion.VERSION_1_8            targetCompatibility JavaVersion.VERSION_1_8        }    }</code></pre> </li>    </ul>    <h3>四、Lambda表达式的使用</h3>    <p>在AS中,如果配置了lambda的插件,可以用lambda的地方就会自动变灰色,然后用lambda替换就好了。</p>    <h3>语法</h3>    <p>语法一:()->{}</p>    <p>其中()和{}可以看情况去掉,()只有一个参数可去掉,{}里逻辑只有一行可去掉</p>    <ul>     <li> <p>无参数时,直接这么写</p> <pre>  <code class="language-java">// 创建Runnable对象      Runnable runnable = () -> {         };</code></pre> </li>     <li> <p>有一个参数时,直接 参数名 -> {}</p> <pre>  <code class="language-java">View.OnClickListener listener = view -> {      };</code></pre> </li>     <li> <p>有多个参数时,只需要在()里写上参数名字就可以</p> <pre>  <code class="language-java">View.OnFocusChangeListener listener = (view, b) -> {      };</code></pre> </li>    </ul>    <p>语法二:::(两个英文冒号)</p>    <p>::是对语法一的简化。</p>    <ul>     <li> <p>如下代码,可以实现语法一一样的效果</p> <pre>  <code class="language-java">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>     <li> <p>:: 语法有一下几种使用情况</p>      <ul>       <li>静态方法引用:ClassName::staticMethodName</li>       <li>实例上的实例方法引用:instanceReference::methodName</li>       <li>构造方法引用:ClassName::new</li>      </ul> </li>    </ul>    <p> </p>    <p>来自:http://www.jianshu.com/p/ef6cbf5ade71</p>    <p> </p>