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(); }
相关推荐
Darling噜啦啦2 分钟前
从 SSE 到 LLM 流式输出:搞懂前端实时通信的两种姿势
前端·后端·llm
观无10 分钟前
若依AOP
java
是2的10次方啊12 分钟前
日志不是越多越好:开发优化、常见坑与线上排查命令
java
wangfpp17 分钟前
原生NodeJS维护Agent Memory实践
后端·agent·全栈
ofoxcoding18 分钟前
Claude Fable 5.1 API 接入指南:模型标识、五级定价策略、effort 参数与缓存 TTL 配置详解
java·spring·缓存·ai
星月日25 分钟前
前端上手后端起手式
前端·后端
掘金挖土26 分钟前
前端手摸手跑路之 AI 应用开发(一)
前端·后端
zww894911133 分钟前
相册印刷项目实战指南:从设计到成品的完整技术流程
java·小程序·eclipse
程序猫.37 分钟前
双指针问题
java·数据结构·算法
拾光Ծ38 分钟前
【MySQL】复合查询、表的连接
java·数据库·sql·mysql