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(); }
相关推荐
CoderYanger6 分钟前
A.每日一题:1967题+1331题
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
言乐619 分钟前
Python实现基本搜索引擎
java·linux·开发语言·python·搜索引擎
萧瑟余晖25 分钟前
JDK 15 新特性详解
java
进击的前栈25 分钟前
Grid 双栏网格与 List 单栏列表的视图切换实现
后端
L-影43 分钟前
springboot启动流程
java·spring boot·spring
xianjixiance_1 小时前
@Entry 与 @Component 装饰器:组件声明、导出与页面入口
后端
ch.ju1 小时前
Java Programming Chapter 4——lambda expression
java·开发语言
布朗克1681 小时前
Go 入门到精通-18-文件操作
java·数据库·golang
罗超驿1 小时前
10.Java对象比较完全指南:从equals到Comparable与Comparator
java·开发语言
w139548564221 小时前
Shadow 阴影体系:多层级阴影提升视觉层次
后端