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(); }
相关推荐
yangminlei6 分钟前
Elasticsearch 全面解析:从原理到实战的分布式搜索引擎指南
java·elk
菜宾11 分钟前
java-分布式面试题(事务+锁+消息队列+zookeeper+dubbo+nginx+es)
java·开发语言·分布式
Remember_99313 分钟前
【LeetCode精选算法】位运算专题一
java·开发语言·数据结构·leetcode·哈希算法
橙露14 分钟前
CGO性能深度剖析:成因、评估与优化全指南
java·jvm·myeclipse
逍遥德18 分钟前
Java Stream Collectors 用法
java·windows·python
Getgit21 分钟前
mysql批量更新语句
java·数据库·mysql·udp·eclipse
黎雁·泠崖21 分钟前
Java静态变量底层:内存图解析+避坑指南
java·开发语言
派大鑫wink23 分钟前
【Day48】MyBatis 注解开发:替代 XML 映射文件
xml·java·mybatis
Gary董24 分钟前
java死锁
java·开发语言
LiLiYuan.30 分钟前
在资源管理器打开IDEA未进行版本管理的文件的方法
java·ide·intellij-idea