【发布时间】:2021-05-26 14:40:03
【问题描述】:
Java 8 引入了 Lambda,它允许我们有效地从 List 中删除所有元素。下面从myList 中删除所有 2 的实例。
List<Integer> myList;
...
myList.removeIf(x -> x==2);
如果我想删除 N 个元素(在本例中为三个),我会使用 for 循环。
for (int i = 0; i < 3; i++) {
myList.remove(Integer.valueOf(2));
}
有没有办法使用 Lambda 从列表中删除指定数量的元素?如果是这样,它是否比for循环代码更有效?
【问题讨论】:
-
怎么样 -
IntStream.range(0,3).forEach(a-> myList.remove(2));? -
@MostNeededRabbit 如果列表中 2 的数量小于 3
java.lang.IndexOutOfBoundsException: Index: 2, Size: 2,您的解决方案将生成错误@ -
@MostNeededRabbit,检查this,因此OP需要使用
Integer.valueOf(2)。 -
@samabcde 但它们不是两个整数。它是一个整数和一个 int 字面量。在这种情况下,整数将被自动拆箱,使比较 int == int,其行为直观。唯一的潜在问题是,如果
x为空,自动拆箱将 NPE,但您的代码也会遇到该问题。 -
@Michael,你是对的,我想念那个。而且我认为使用
equals更安全,因为 OP 可能会传递一个 Integer 而不是 int 来替换硬编码的 2,== 会有问题。