List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
// list.clear();
// list.add(2);
list = list.stream().
mapToInt(integer -> 2).
filter(integer -> integer ==2).
distinct().
boxed().collect(Collectors.toList());
他们有多么不同?重视阅读或使用新技术?
答案 0 :(得分:2)
您想要执行的整个操作有点错误
list = list.stream()
.mapToInt(i -> 2) // every single element is transformed to "2"
.filter(i -> i == 2) // since the previous step turns everything into 2, this one will take every element
.distinct() // then you apply distinct, resulting in a single element
.boxed()
.collect(Collectors.toList());
结果是List
,其中一个元素的值为2
,但效率非常低。
如果你真的想要过滤,那么只需:
就会更容易 list = list.stream()
.filter(i -> i == 2)
.collect(Collectors.toList());
除了你的初始代码:
list.clear();
list.add(2);
将失败,因为Arrays.asList
将创建一个不可变列表。
但即使你有一个可变的ArrayList,不同的是你的流方法不会改变流的来源;当你第一次接近时,你会删除所有内容并用不同的值重新填充它。