Lambda表达式中使用的变量需要遵循以下规则:

1、只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。
2、局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
3、不允许声明一个与局部变量同名的参数或者局部变量。
下面这段代码编译器会报错:

public static void main(String args[]){List<String> dest = new ArrayList<>();List<String> src = new ArrayList<>(Arrays.asList("01", "02", "03"));src.forEach(item -> {add(dest,item);});dest = null;}

因为违反了第二条规则(局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义))

稍作修改,去掉对dest的修改,可以编译通过:

public static void main(String args[]){List<String> dest = new ArrayList<>();List<String> src = new ArrayList<>(Arrays.asList("01", "02", "03"));src.forEach(item -> {add(dest,item);});}

通过lambda表达式,向线程中传递局部变量,并且执行相关操作:

    public static void main(String args[]){List<String> dest = new ArrayList<>();List<String> src = new ArrayList<>(Arrays.asList("01", "02", "03"));new Thread(()->add(dest,"a")).start();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(dest.size());}private static void add(List<String>l,String item){l.add(item);System.out.println(item);}

转载于:https://www.cnblogs.com/shuhe-nd/p/11532218.html

lambda表达式传参相关推荐

  1. java+lamda+传参_lambda表达式传参

    Lambda表达式中使用的变量需要遵循以下规则: 1.只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误. 2.局部变量可以不用声明 ...

  2. html es表达式传参,ES2015 正则表达式新增特性

    正则表达式 的 ES2015 正则表达式新增特性 ES2015 正则表达式新增特性: 在原来正则表达式基础上,ES2015增强了对四字节unicode字符的支持等功能. 更多正则表达式内容可以参阅正则 ...

  3. Java8中Lambda表达式的10个例子

    Java8中Lambda表达式的10个例子  例1 用Lambda表达式实现Runnable接口 Java代码   //Before Java 8: new Thread(new Runnable() ...

  4. 10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里.在J ...

  5. java 拉姆表达式_Java8 lambda表达式10个示例

    Java 8 lambda表达式示例 转自importNew 原文链接 例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现R ...

  6. Java 8 新增lambda表达式(-)

    2019独角兽企业重金招聘Python工程师标准>>> Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性 ...

  7. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

  8. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

  9. 线程,Java8,10个lambda表达式

    1. 线程. 同步,异步,线程互斥, 锁. .join, sleep, wait.. 三种创建模式 Thread class 继承 Thread 类 Runnable接口 实现 Runnable接口 ...

  10. Java Lambda表达式入门 1

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/53930569 文章出自:薛瑄博客 我对Java 8发布非常激动,尤其是lambda ...

最新文章

  1. bert-as-service使用
  2. 淘宝网7年变化图--建议非美工UED人员也看看
  3. 测试一下能够图文混排
  4. java短_Java中的最短代码和最低延迟
  5. centos7 firewall指定IP与端口访问(常用)
  6. Linux CentOS 5.5 服务器安装图文教程
  7. 【渝粤教育】 国家开放大学2020年春季 1039高级财务会计 参考试题
  8. python 如何定义n个变量 (变量声明自动化)
  9. (二)线程--通过委托异步调用方法
  10. RabbitMq学习笔记003---RabbitMQ处理类型分类
  11. android 从网络加载图片并显示
  12. 【汇编语言】程序格式
  13. 设备独立的操作系统软件
  14. 2016.2注册破解方法
  15. ContentProvider 之 监听共享数据变化
  16. CAN负载率为什么不能太高?
  17. 离散数学——图论中图的同构的应用
  18. 失恋CPR 自救手册
  19. 中海国亚Java笔试题
  20. 在 markdown 中使用表情符号

热门文章

  1. 实习成长之路:MySQL二 : 一条SQL更新语句是如何执行的?
  2. 算法案例之有效字母异位词
  3. 基于 Flink+Iceberg 构建企业级实时数据湖
  4. Android Studio如何Debug对应so文件C/C++代码
  5. java 配置dbcp_java – 使用DBCP进行Tomcat配置
  6. cdh用户权限_CDH6.3.2之Sentry权限管理(三)
  7. 帆软高级函数应用之数(学)值函数
  8. java 字符串排序_Java控制台输入字符串及字符串比较
  9. python截取某一段文字分栏_Python文本数据互相转换(pandas and win32com)
  10. python 多分类 recall_sklearn多分类问题