ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

02 Lambda表达式

2019-08-31 21:42:45  阅读:198  来源: 互联网

标签:02 参数 o1 返回值 Lambda o2 表达式 lambda


02 Lambda表达式

1. 概念:

    Java8 中新增加了lambda表达式,通过使用lambda表达式可以编写复杂的处理算法,
    开发者在编写代码时,只要简单的修改 一个方法,就能让代码在多核CPU上高效运行。
    
可以把Lambda表达式理解为【简洁地】表示 【可传递的】【匿名函数】 的一种方式;
它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。
        匿名:我们说匿名,是因为它不像普通的方法那样有一个明确的名称。
   		函数:我们说它是函数,是因为Lambda函数不像方法那样属于某个特定的类。
   			  但和方法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表。
   		传递:Lambda表达式可以作为参数传递给方法或存储在变量中。(行为参数)
   		简洁:无需像匿名类那样写很多模板代码。
    lambda表达式的作用:**【 lambda表达式可以快速实现接口中的方法 】**

eg    :    函数式编程,lambda表达式 替代 匿名内部类
public static void main(String[] args) throws Exception {
    //传统匿名内部类编程:
    Comparator<String> c = new Comparator<String>() {
	    @Override
	    public int compare(String o1, String o2) {
		    return o1.length() - o2.length();
	    }
    };

    //函数式编程:参数 + 返回值
    Comparator<String> d = (o1,o2)->o2.length() - o1.length();
    //Comparator<String> d = (o1,o2)-> { return o2.length() - o1.length();};	
    TreeSet<String> set = new TreeSet<>(c);
}

2. lambda表达式的使用:

   ** 基本格式:	() -> {}**
() 中用来写传入的参数值,要和函数式接口中的抽象方法的参数类型一致
{} 用来写表达式的具体实现代码。
-> 固定格式,不可在中间添加空格
注:如果大括号里只有一句返回值代码,可以这样写:	**() -> 返回值;   **
             如果不止一句代码,需要用 {} 包围,且 {} 里的代码需要打分号,就是普通正常代码。
	 如果没有返回值,且只有一句代码的情况下,不可以简写,系统会默认当作返回值返回!

1)没有参数,没有返回值:	           	()->{}			

2)没有参数,有返回值:	                ()->{return 值;}   ()-> 值;
	
3)有一个参数,没有返回值:              (a)->{System.out.println(a)}

4)有一个参数,有返回值:	            (a)->{a++;return a;}
	   
       注:只有一个参数,()也可以不写: 	a->{};

5)有两个参数,没有返回值:				(a,b)->{a++;System.out.println(b);}

6)有两个参数,有返回值:		        (a,b)->{a++;return a;}

3. lambda中局部变量的作用范围:

	lambda中可以使用成员变量、局部变量,
        但是,只要在lambda表达式中使用过局部变量,该局部变量就会默认修改为final,
            不论是在lambda表达式里面还是外面,都不能再修改了。
            成员变量没有使用限制
static int sum = 20;
public static void main(String[] args) {
    //int id = 10;   变量名不能和lambda表达式的参数值一样
   	int age = 10;
   
   	I3 i1 = (id)-> { 
   	    System.out.println(id++); 
   		System.out.println(sum);
        sum = 24;
        System.out.println(age); 
   	    //age = 20;          //如果在lambda表达式中使用了局部变量age
   							 //会默认将局部变量的age修改为final修饰的,
   							 //所以不能再次赋值
   	};
   sum = 25;
   //age = 20;
}

标签:02,参数,o1,返回值,Lambda,o2,表达式,lambda
来源: https://blog.csdn.net/qq_37465257/article/details/100177402

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有