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(); }
相关推荐
摇滚侠2 分钟前
Maven 入门+高深 SSM 案例 111-112
java·数据库·maven
Chase_______6 分钟前
【Java基础 | 16】集合框架(下):Map、HashMap 与 TreeMap
java·windows
Aaswk13 分钟前
Java项目:文件批量处理工具
java·开发语言·vscode·idea
ZengLiangYi16 分钟前
从 RAG 到知识图谱:个人知识管理的演进
数据库·后端·程序员
小江的记录本18 分钟前
【Spring全家桶】Spring AI核心原理、大模型集成、Prompt工程、RAG实现、AI Agent开发(附《思维导图》+《面试高频考点清单》)
java·人工智能·spring boot·后端·spring·面试·prompt
plainGeekDev21 分钟前
线程安全集合 → 协程安全替代
android·java·kotlin
手握风云-28 分钟前
Spring AI:让大模型住进 Spring 生态(五)
java·后端·spring
plainGeekDev28 分钟前
Timer → Coroutines
android·java·kotlin
doiito28 分钟前
【Agent Harness】有了 Oxigraph 图数据库,为什么我还要再塞一个 Qdrant 向量库?
后端
锋行天下29 分钟前
中小项目高可用,真的需要K8s吗?从单机备份到企业级架构的完整思考
后端·mysql·nginx