为什么IntStream的foreach()必须接收IntConsumer的accept()参数?

时间:2017-02-21 11:04:34

标签: methods lambda interface

我正在阅读一本电子书,目前正在阅读Lambdas - Stream。 请仔细看看代码的第一部分。

int[] values = {3, 10, 6, 1, 4, 8, 2, 5, 9, 7};

// display original values
System.out.print("Original values: ");
IntStream.of(values)
         .forEach(value -> System.out.printf("%d ", value));
System.out.println();

本书解释了IntStream方法forEach(终端操作)对每个流元素执行任务。该方法接收一个对象作为其实现IntConsumer功能接口(包java.util.function)的参数。此接口的accept方法接收一个int值并使用它执行任务。

此外,它说在Java SE 8之前我们通常会使用匿名内部类实现接口IntConsumer:

new IntConsumer()
{
    public void accept(int value)
    {   
        System.out.printf("%d ", value);
    }
}

现在我的问题是为什么我们需要一个IntConsumer实例才能调用该方法?

0 个答案:

没有答案