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(); }
相关推荐
千百元几秒前
限制网段访问服务器端口63790
java·网络·mybatis
宋情写4 分钟前
JavaAI03-数据来源
java
钦拆大仁10 分钟前
JDK17新特性
java
小程故事多_8017 分钟前
Spring AI 赋能 Java,Spring Boot 快速落地 LLM 的企业级解决方案
java·人工智能·spring·架构·aigc
努力的小雨17 分钟前
从“Agent 元年”到 AI IDE 元年——2025 我与 Vibe Coding 的那些事儿
后端·程序员
Caarlossss36 分钟前
mybatis
java·数据库·tomcat·maven·mybatis·mybatis-spring
喵手39 分钟前
项目实战案例:从设计到部署!
java·部署·项目实战·设计
源码获取_wx:Fegn089542 分钟前
基于springboot + vue小区人脸识别门禁系统
java·开发语言·vue.js·spring boot·后端·spring
youngee111 小时前
hot100-61电话号码的字母组合
java·数据结构·leetcode
寂寞旅行1 小时前
java敏感词过滤(sensitive-word)
java·开发语言·word