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(); }
相关推荐
资深技术分享员14 分钟前
遗留系统——把“改不动的老系统“接过来
java·服务器·数据库
IT_陈寒16 分钟前
Python的GIL锁让我把多线程代码全重写了!
前端·人工智能·后端
江湖有缘22 分钟前
Docker实战 | 使用Docker部署Bibliotheca阅读习惯管理工具
java·docker·容器
艾莉丝努力练剑24 分钟前
【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现
java·开发语言·网络·c++·人工智能·学习·sdk
百度一下吧25 分钟前
umi后台管理项目实战:从工程搭建到生产构建
java·前端·javascript
Joe_Wang528 分钟前
【从0到1学习JVM · 14】堆内存各区域分工与Xms和Xmx设为一样的真相
java·jvm·学习·垃圾回收
.道阻且长.41 分钟前
C++11 :右值引用的作用,引用折叠和完美转发
java·开发语言·c++
code2cat42 分钟前
Java进阶篇之StampedLock:先读取,再校验,必要时退回读锁
java·开发语言
光依旧43 分钟前
MCP实战手记(九):生产化MCP Server的6层安全防护
java·人工智能·spring boot·安全·网络安全·ai agent·mcp
阳光九叶草LXGZXJ1 小时前
Linux-学习-12-JDK安装
java·linux·运维·学习