java stream 使用局部变量
直接使用是没问题的
public static void main(String[] args) throws IOException {List<String> list1 = Arrays.asList("1","2","3");List<String> list2 = Arrays.asList("2", "1");list2.stream().filter(iterm -> {return list1.contains(iterm);}).forEach(System.out::println);}
但是如果局部变量发生变化,则需要新建一个变量,
局部变量list1
发生变化,此时需要新建finalList
来接收它,才能在stream
中使用
public static void main(String[] args) throws IOException {List<String> list1 = Arrays.asList("1","2","3");List<String> list2 = Arrays.asList("2", "1");list1 = Arrays.asList("3");List<String> finalList = list1;list2.stream().filter(iterm -> {return finalList.contains(iterm);}).forEach(System.out::println);}
原因是:
其实这就要说到Jvm内存模型和线程了,因为实例变量存在堆中,而局部变量是在栈上分配,lambda 表达(匿名内部类) 会在另一个线程中执行。如果在线程中要直接访问一个局部变量,可能线程执行时该局部变量已经被销毁了,而 final 类型的局部变量在 Lambda 表达式(匿名类) 中其实是局部变量的一个拷贝。
参考:
Variable used in lambda expression should be final or effectively final
java stream 使用局部变量相关推荐
- Java 10:局部变量类型推断
Java 10:局部变量类型推断 在本文中,我们将深入研究Java 10中引入的局部变量类型推断的新特性.我们将讨论使用局部变量类型推断的范围和局限性. 此功能是作为JEP(JDK增强提案)的一部分提 ...
- java全局变量和局部变量_Java 10:局部变量类型推断
java全局变量和局部变量 In this article, we would take a deep dive at the new feature of Local-Variable Type I ...
- Java-Runoob:Java Stream、File、IO
ylbtech-Java-Runoob:Java Stream.File.IO 1.返回顶部 1. Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出 ...
- Java Stream(流)的分类, 四大基本流的介绍
上一篇文章已经介绍过什么是流, 以及流的基本概念 http://blog.csdn.net/nvd11/article/details/29917065 本文主要介绍java四大基本流的方法. 一, ...
- Java Stream简介, 流的基本概念.
在Java or .net编程中, 我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是S ...
- 认清JavaScript和JAVA全局变量和局部变量的作用域
认清JavaScript和JAVA全局变量和局部变量的作用域 2010年2月28日 george 发表评论 阅读评论 通过淘宝面试题来认清JavaScript和JAVA全局变量和局部变量的作用域 注意 ...
- Java Stream API性能测试
Java Stream API性能测试 已经对Stream API的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对Stream API的性能一探究竟. 为保证测试 ...
- java stream中Collectors的用法
文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...
- java stream 原理
java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...
最新文章
- Oracle微服务框架 Helidon尝鲜(一)!~
- Python应用实战-Clumper库 | Groupby具体案例用法
- Object.preventExtensions()使用技巧
- java中阻止类的继承
- Mac 下 maven 安装与配置
- activiti工作流简介
- 电脑翻译,百度翻译电脑桌面版
- FastReport产品介绍及免费下载地址
- Vue 集成 PDF.js 实现 PDF 预览和添加水印
- 选中的磁盘具有mbr分区表。在efi_电脑磁盘怎么重建主引导记录mbr【详细步骤】...
- c语言flag跳出循环,四种方法跳出多层循环(return goto flag try)
- 亲密关系科学(03)夫妻相处的智慧
- 不只是同构应用(isomorphic 工程化你所忽略的细节)
- Svn修改自己已经提交的备注
- 阿里云新购服务器磁盘disk挂载完整教程
- 西门子PLC 以太网通讯
- 在ubuntu下烧写映像文件到nand--基于三星210开发板
- multisim 常见报错
- Docker入门篇(一)
- 若用8位机器码表示二进制数-111
热门文章
- Html之实例练习(轮播图片、放大镜效果、面板拖动)
- c语言课后作业答案指针,C语言程序基础练习题带答案
- XML/YAML文件的输入输出
- spring gateway 限流持久化_Spring Cloud Gateway网关如何快速实施限流方案?-Part 6
- Stale branches 设置_Mac OS 网络设置教程 wifi设置与宽带设置详解
- 计算机符串长度的函数,用js写一个函数,计算出字符串的长度
- python命令行模式怎么输入_python获得命令行输入的参数的两种方式
- python笔记之matplotlib.pyplot曲线平滑自定义函数:smooth_curv()
- go语言服务器连接mysql,golang中连接mysql数据库
- bootstrap 导航栏 字体 颜色_设计自己的Hugo主题——开发导航栏