StreamtoList()返回的是只读List原则上不可修改,collect(Collectors.toList())默认返回的是ArrayList,可以增删改查 1. 背景 在公司看到开发环境突然发现了UnsupportedOperationException报错,想到了不是自己throw的应该就是操作collection不当。 发现的确是同事使用了类似stringList.stream().filter(number -> Long.parseLon...
如果使用collect(Collectors.toList()),sonar或idea自带以及第三方的一些code checker会爆warning,以本人经验,可以使用collect(Collectors.toCollection(ArrayList::new))来代替。
而使用Stream.collect(Collectors.toList())创建出来的则是一个普通的List,是可以做增删改操作的。 那么如果用Collectors也要创建不可变的List要怎么写呢?其实也很简单,只需要调用Collectors.toUnmodifiableList()就可以了。所以与本文开头等价代码替换可以这样写: ...
StreamtoList()返回的是只读List原则上不可修改,collect(Collectors.toList())默认返回的是ArrayList,可以增删改查 1. 背景 在公司看到开发环境突然发现了UnsupportedOperationException报错,想到了不是自己throw的应该就是操作collection不当。 发现的确是同事使用了类似stringList.stream().filter(number -> Long.parseLon...
.reduce(new ArrayList<Integer>(), (List<Integer> l, Integer e) -> { l.add(e); return l; }, (List<Integer> l1, List<Integer> l2) -> { l1.addAll(l2); return l1; } ); //手动实现toListCollector --- 滥用reduce, 不可变的规约---不可以并行 ...
Stream toList()返回的是只读List原则上不可修改,collect(Collectors.toList())默认返回的是ArrayList,可以增删改查 1. 背景 在公司看到开发环境突然发现了UnsupportedOperationException 报错,想到了不是自己throw的应该就是操作collection不当。 发现的确是同事使用了类似stringList.stream().filter(number -> Long.pars...
在上面的代码中,我们定义了一个DeepCloneCollector类,实现了Collector接口的几个方法。这里我们使用ArrayList作为容器,通过add方法将元素添加到容器中。在combiner方法中,我们将两个容器合并成一个。 通过使用自定义Collector,我们可以将Stream流转换为一个深拷贝的List对象。下面是一个示例代码: ...
通过查看Stream.toList()的源码: default List<T> toList() {return (List<T>) Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray()));} 我们可以发现,它所创建的是一个unmodifiableList不可变的List。 而使用Stream.collect(Collectors.toList())创建出来的则是一个普通的 List,是可以...
{23//@Override24//public String[] apply(int value) {25//return new String[value];26//}27//});28//同上 简化29String[] array2 = s3.toArray(s ->newString[s]);30//Object[] array = s3.toArray();31//String[] array3 = s3.toArray(String[]::new);//拓展32//Integer[] array4...
Java8新特性stream流一、包装数据类型 @Test public void main22() { List<Integer> list = new ArrayList<Integer>(){{ add(7); add(5); add(1); add(2); add(8); add(4); add(3); add(6); add(3); add(6); add(3); add(6); }}; // 过滤 List<Int 半月无霜 2023/03/03 4870...