android lambda语法简述


android lambda语法简述


本篇文章简述lambda常用语法 。

文章分为3部分:  简介 语法  附录


一简介:什么是lambda

oracle官方的说法是:  

android lambda语法简述_第1张图片


大意是

Lambda提供了一个清晰和简洁的方式来表示一个方法的接口使用的表达式。

Lambda表达式更容易遍历,过滤(filter)。此外,新的并发功能提高在多核环境中的性能



二语法

(1)      

   ()->{}

普通方法图例:

android lambda语法简述_第2张图片

语法的意思:

()       代表参数部分,参数名称   ( 同上图的 parameter list )

->     箭头   ( 新出的 )

{ }     方法的主体   ( 同上图的 method body )


下面会举三个lambda语法例子   分别是:  无参数 、 1个参数 、 多个参数


1.1 举个例子(无参数):

public class RunnableTest {
   public static void main(String[] args) {
     
     System.out.println("=== RunnableTest ===");
     
     // Anonymous Runnable
     Runnable r1 = new Runnable(){
       
       @Override
       public void run(){
         System.out.println("Hello world one!");
         System.out.println("Hello world one!");
       }
     };
     
     // Lambda Runnable
     Runnable r2 = () -> {
     	System.out.println("Hello world two!");
	 	  System.out.println("Hello world two!");
     };
     
     // Run em!
     r1.run();
     r2.run();
     
   }
}


代码中使用了2个Runnable 对象 r1  和 r2 

r1 为使用lambda之前,    r2  为使用lambda之后  .    


对比r1和r2   :          

r2 对  r1进行了简化 , 去掉了new Runnable 并将r1 的   run() {   }       替换为    ()   -> {}

android lambda语法简述_第3张图片



1.2 举个带参数例子(android 例子)

android lambda语法简述_第4张图片

使用lambda前 onclick(View view) {   }     使用lambda简化后  (view) -> { }


1.3 多参数例子(android 例子)

android lambda语法简述_第5张图片



如果大括号内的代码只有1行 可以将大括号也简化掉   如下图中的  System.out.print("多参数3")



android lambda语法简述_第6张图片


(2)    

   ::

该语法由双冒号组成

语法  ::  是对 () -> { } 方式的简化

举个例子

android lambda语法简述_第7张图片


观察  func4   可以发现:  

Func3 func4 = (o, s, s2) -> Utils.getDemo(o, s, s2);


方法的右侧 , 参数list ( o , s , s2  ) 完整的传递给了 箭头右侧的方法  Utils.getDemo(o, s, s2);  


------

再观察 func5 可以发现

当参数部分(parameter list)  与  方法的主体(method body)  中函数接收的参数相同且只有一行代码时 可以简化为 :: 形式。

例如func5 的

Utils::getDemo;



:: 语法在使用有如下几种情况


静态方法引用:ClassName::staticMethodName

实例上的实例方法引用:instanceReference::methodName
构造方法引用:ClassName::new 

三附录


oracle文档:
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html

android studio中使用lambda语法参考文章:
http://blog.csdn.net/aaawqqq/article/details/52430247

其它参考blog:
http://www.cnblogs.com/figure9/archive/2014/10/24/4048421.html


//  ┏┓   ┏┓
//┏┛┻━━━┛┻┓
//┃       ┃
//┃   ━   ┃
//┃ ┳┛ ┗┳ ┃
//┃       ┃
//┃   ┻   ┃
//┃       ┃
//┗━┓   ┏━┛
//   ┃   ┃   神兽保佑
//   ┃   ┃   代码无BUG!
//   ┃   ┗━━━┓
//   ┃       ┣┓
//   ┃       ┏┛
//   ┗┓┓┏━┳┓┏┛
//     ┃┫┫ ┃┫┫
//     ┗┻┛ ┗┻┛

谢谢

你可能感兴趣的:(rxjava)