JDK8之Lambda表达式

Lambda表达式

Lambda表达式介绍

 Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对
理解Lambda表达式有很大帮助,因为Java正在将自己变的更高(Sha)级(Gua),更人性化。--------可以这么说
lambda表达式其实就是实现SAM接口的语法糖。
 lambda写的好可以极大的减少代码冗余,同时可读性也好过冗长的内部类,匿名类。

举例:

lambda表达式语法

//一般语法
(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
statment1;
statment2;
//.............
return statmentM; }
这是lambda表达式的完全式语法,后面几种语法是对它的简化。
//单参数语法
param1 -> {
statment1;
statment2;
//.............
return statmentM; }当lambda表达式的参数个数只有一个,可以省略小括号;
案例:
List<String> proNames = Arrays.asList(new String[]{"Ni","Hao","Lambda"});
List<String> lowercaseNames1 = proNames.stream().map(
name -> {return name.toLowerCase();}).collect(Collectors.toList());
//单语句写法
param1 -> statment
当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号;
案例:
List<String> proNames = Arrays.asList(new String[]{"Ni","Hao","Lambda"});
List<String> lowercaseNames2 = proNames.stream().map(
name -> name.toLowerCase()).collect(Collectors.toList());

lambda表达式中的this概念

在lambda中,this不是指向lambda表达式产生的那个SAM对象,而是声明它的外部对象。
例如:
public class WhatThis {
public void whatThis(){
//转全小写
List<String> proStrs = Arrays.asList(new String[]{"Ni","Hao","Lambda"});
List<String> execStrs = proStrs.stream().map(
str -> {
System.out.println(this.getClass().getName());
return str.toLowerCase();
 }).collect(Collectors.toList());
execStrs.forEach(System.out::println);
 }
public static void main(String[] args) {
WhatThis wt = new WhatThis();
wt.whatThis();
 }
}
输出:
com.wzg.test.WhatThis
com.wzg.test.WhatThis
com.wzg.test.WhatThis
ni
hao
lambda

Lambda中参数的使用

lambda表达式可以访问给它传递的变量,访问自己内部定义的变量,同时也能访问它外部的变量。
不过lambda表达式访问外部变量有一个非常重要的限制:变量不可变(只是引用不可变,而不是真正的不可变)。
当在表达式内部修改waibu = waibu + " ";时,IDE就会提示你:
Local variable waibu defined in an enclosing scope must be final or effectively final
编译时会报错。因为变量waibu被lambda表达式引用,所以编译器会隐式的把其当成final来处理。
以前Java的匿名内部类在访问外部变量的时候,外部变量必须用final修饰。现在java8对这个限制做了优化,可以不
用显示使用final修饰,但是编译器隐式当成final来处理。
//举例
String waibu = "lambda :";
List<String> proStrs = Arrays.asList(new String[]{"Ni","Hao","Lambda"});
List<String>execStrs = proStrs.stream().map(
chuandi -> {
Long zidingyi = System.currentTimeMillis();
return waibu + chuandi + " -----:" + zidingyi;
 }
 ).collect(Collectors.toList());
execStrs.forEach(System.out::println);
输出:
lambda :Ni -----:1474622341604
lambda :Hao -----:1474622341604
lambda :Lambda -----:1474622341604
变量waibu :外部变量
变量chuandi :传递变量
变量zidingyi :内部自定义变量

 

docker启动报错203时,这通常是由于docker与操作系统之间的兼容性问题导致的。为解决此问题,您可以按照以下步骤进行操作: 1. 首先,您需要卸载旧版本的docker,以便安装最新版本。您可以使用以下命令卸载docker: 2. 接下来,您需要更新yum工具,以确保能够获取到最新的docker版本。您可以使用以下命令更新yum: 3. 然后,您需要添加docker的仓库文件docker-ce.repo。您可以使用以下命令添加该仓库: 4. 添加完仓库后,您可以使用以下命令查看docker-ce仓库中可用的docker版本: 5. 您可以选择安装最新的docker版本。根据您查看到的版本列表,选择一个较新的版本进行安装。您可以使用以下命令安装docker: 6. 安装完成后,您可以尝试启动docker,并检查是否仍然出现错误203。 通过以上步骤,您可以解决docker启动报错203的问题,并使用最新版本的docker。希望这能对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [docker 启动容器报错及解决办法](https://blog.csdn.net/TOP__ONE/article/details/101426455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值