Java 8 会在使用流“过滤器”和“收集”后创建新的列表吗?

2022-09-02 11:14:27

我有使用Java8的代码:

List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(5);
list.add(4);
list.add(2);
list.add(5);
list = list.stream().filter(i -> i >= 3).collect(Collectors.toList());

原始列表是 [3, 5, 4, 2, 5]。执行“筛选”和“收集”操作后,列表将更改为 [3, 5, 4, 5]。

是否所有操作都对原始列表执行,并且不创建新列表?还是在“过滤”和“收集”操作之后,返回新创建的列表并忽略原始列表?


答案 1

根据 Javadoc,将返回的 by 传递到方法中将创建一个新列表。CollectorCollectors.toList()collect

public static <T> Collector<T,?,List<T>> toList()

返回 将输入元素累积到新 元素中的 。对返回对象的类型、可变性、可序列化性或线程安全性没有保证。如果需要对返回的进行更多控制,请使用 。CollectorListListListtoCollection(Supplier)

原始列表不受影响。


答案 2

如果您确实要修改原始列表,请考虑使用 removeIf

list.removeIf(i -> i < 2);