Java 8 - For Each和removeIf

时间:2016-01-25 12:41:54

标签: java lambda

我试图通过组合ForEach方法在Java 8中使用removeIf来执行操作。但是我得到了错误。

我无法在以下程序中合并forEachremoveIf

public class ForEachIterator {

    public static void main(String[] args) {
        List<Integer> ints = new ArrayList<Integer>();
        for (int i = 0; i < 10; i++) {
            ints.add(i);
        }
        System.out.println(ints);
        // Getting the Error in next line
        ints.forEach(ints.removeIf(i -> i%2 ==0));
        System.out.println(ints);
    }
}

2 个答案:

答案 0 :(得分:26)

不需要forEach,Lambda表达式将适用于集合的所有元素

ints.removeIf(i -> i%2==0)

removeIf: &#34; 删除此集合中满足给定谓词的所有元素&#34;

<强>只需...

对于集合(i)中的每个元素(ints),如果(removeIf)谓词(i%2==0)为真,则将其删除。这将作用于原始集合,如果删除了任何元素,则返回true。

答案 1 :(得分:0)

removeif 方法本身一个一个地给出元素作为它的传递参数,这就是为什么我们不需要在这里使用 forEach 循环。

超过整数 ->

ints.forEach(ints.lambdaEx)

它导致两个 n 循环导致 n^2 迭代,这里不需要。

只需使用“removeif( n -> n % 2 == 0)