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(); }
相关推荐
用户298698530143 分钟前
HTML 转 Word 指南:新手入门教程
人工智能·后端·python
letisgo512 分钟前
JDK21 + Spring AI 2.0 入场指南:2026 年 Java 开发者 AI 架构全景图
java·ai·idea·jdk21
白仑色15 分钟前
Spring Boot 从切面统一控制事务
java·spring boot·aop·spring事务
Csvn19 分钟前
🐍 Day1 : Python 环境搭建 — 现代 Python 工作流
后端·python
Nturmoils20 分钟前
工位上这台"竖着叠"的双屏,让我改bug终于不用来回切窗口了
后端
Flynt24 分钟前
Java并行流,让我debug了一整天
java
42tr_k25 分钟前
用 OpenDataLoader PDF 搭一个兼容 MinerU 的解析服务
后端·python
aircrushin29 分钟前
Claude 5 之后,上下文工程该做减法了
前端·人工智能·后端
Csvn30 分钟前
📊 SQL 入门 Day 16:数据插入技巧
后端·sql
鸽芷咕31 分钟前
从MongoDB迁移到KES:一次文档库国产化替换的实战手记
后端