stream().toList()的大坑,你真的了解吗

stream().toList()

下面这两行代码相同吗?

ini 复制代码
List<Integer> list1 = list.stream().toList();
List<Integer> list2 = list.stream().collect(Collectors.toList());

在Idea里,Idea还会提醒你可以替换,难道真的是相同的api吗?

我们直接打印一下它们的Class

Java 复制代码
List<Integer> list1 = list.stream().toList();
List<Integer> list2 = list.stream().collect(Collectors.toList());
System.out.println(list1.getClass());
System.out.println(list2.getClass());
kotlin 复制代码
class java.util.ImmutableCollections$ListN
class java.util.ArrayList

发现一个是ImmutableCollection,一个是ArrayList

从名字中就可以看出来list1是不可变的,remove一下果然抛出了异常

Java 复制代码
// all mutating methods throw UnsupportedOperationException
@Override public void    add(int index, E element) { throw uoe(); }
@Override public boolean addAll(int index, Collection<? extends E> c) { throw uoe(); }
@Override public E       remove(int index) { throw uoe(); }
@Override public void    replaceAll(UnaryOperator<E> operator) { throw uoe(); }
@Override public E       set(int index, E element) { throw uoe(); }
@Override public void    sort(Comparator<? super E> c) { throw uoe(); }
相关推荐
用户298698530148 分钟前
Java 创建 CSV 文件的三种实用方法:从零构建、数组写入与 Excel 转换
java·后端·excel
玉宇夕落13 分钟前
Cheerio虚拟DOM原理
后端
geovindu14 分钟前
go: Recursion Algorithm
开发语言·后端·算法·golang·递归算法
Cry丶15 分钟前
一次 FTP 上传引发 504 Gateway Timeout 的排查复盘
java·nginx·ftp·openresty·被动模式·504 gateway·生产问题排查
用户29307509766918 分钟前
深入理解 RAG 文档切割:从知识库到向量数据库的关键一步
后端
geovindu20 分钟前
CSharp: Composite Pattern
开发语言·后端·c#·组合模式·结构型模式
码农进化录21 分钟前
Java 程序员的 AI 进化论 | AI 辅助 CI/CD,让 AI 帮你做代码审查和部署决策
java·spring boot·openai
zyplayer-doc23 分钟前
企业文档的进化:网盘和在线文档的下一个升级方向—知识库系统
java·大数据·数据库·人工智能·ocr
吃饱了得干活26 分钟前
从零设计一个高并发点赞系统:缓存+MQ异步持久化实战
java·架构
宇图SHARE28 分钟前
别再用 Python 写 Agent 前端了!Vue3 + NestJS + TypeScript 全栈方案,开发效率翻倍
前端·后端