Java 8 for循环不一致:BinaryOperator列表与整数列表

Law*_*nce 4 java lambda for-loop list java-8

在下面的Java 8代码片段中,目的是遍历二进制(2-arg)运算符/ lambda函数列表.Eclipse生成错误The method o(int,int) is undefined for the type X.该错误与循环变量相关联o.如果它是相关的,Eclipse的版本是"用于Web开发人员的Eclipse Java EE IDE",Mars Release(4.5.0).

import java.util.List;
import java.util.function.BinaryOperator;
public class X {
    public void f(List<BinaryOperator<Integer>> op) {
        for (BinaryOperator<Integer> o : op) {
            int x = o(1,2);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果op的类型更改为List,则不存在编译器错误.

public void f(List<Integer> op) {
    for (Integer o : op) {
        int x = o;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么for循环适用于List<Integer>但不适用于List<BinaryOperator<Integer>>,以及如何在Java 8中迭代lambda函数列表?

Era*_*ran 7

如果您希望在循环中应用BinaryOperators List,则必须apply为以下每个元素调用该接口的方法List:

public void f(List<BinaryOperator<Integer>> op) {
    for (BinaryOperator<Integer> o : op) {
        int x = o.apply(1,2);
    }
}
Run Code Online (Sandbox Code Playgroud)