将lambda表达式转换回内部类



我有以下lambda表达式:

Function<Integer, Function<Integer, Function<BinaryOperator<Integer>, Integer>>> someComputation = i1 -> i2 -> f -> f.apply(i1, i2);

Java 8 lambda语法对我来说仍然有点陌生,所以我试图将其转换回内部类,但似乎无法转换,这会引发编译错误,或者可能我缺少了什么。以下是我的想法:

    Function<Integer, Function<Integer, Function<BinaryOperator<Integer>, Integer>>> someComputation2 = new Function<Integer, Function<Integer, Function<BinaryOperator<Integer>, Integer>>>() {
        @Override
        public Function<Integer, Function<BinaryOperator<Integer>, Integer>> apply(Integer integer) {
            Function<Integer, Function<BinaryOperator<Integer>, Integer>> f = new Function<Integer, Function<BinaryOperator<Integer>, Integer>>() {
                @Override
                public Function<BinaryOperator<Integer>, Integer> apply(Integer integer) {

                    return new Function<BinaryOperator<Integer>, Integer>() {
                        @Override
                        public Integer apply(BinaryOperator<Integer> integerBinaryOperator) {
                            return integerBinaryOperator.apply(f,""" WHAT IS IN HERE ???""");
                        }
                    };

                }
            };
            return f;
        }
    };

在外部匿名类实例的方法中有两个Integer变量。这些是应该传递给最内部方法调用的变量:

Function<Integer, Function<Integer, Function<BinaryOperator<Integer>, Integer>>> someComputation2 = new Function<Integer, Function<Integer, Function<BinaryOperator<Integer>, Integer>>>() {
    @Override
    public Function<Integer, Function<BinaryOperator<Integer>, Integer>> apply(Integer i1) {
        Function<Integer, Function<BinaryOperator<Integer>, Integer>> f = new Function<Integer, Function<BinaryOperator<Integer>, Integer>>() {
            @Override
            public Function<BinaryOperator<Integer>, Integer> apply(Integer i2) {
                return new Function<BinaryOperator<Integer>, Integer>() {
                    @Override
                    public Integer apply(BinaryOperator<Integer> integerBinaryOperator) {
                        return integerBinaryOperator.apply(i1, i2);
                    }
                };
            }
        };
        return f;
    }
};

如果您使用Eclipse或其他等效的Java IDE,您可以生成一些骨架代码,然后连接您想要的实现。正如你所期望的是

Function<Integer, Function<Integer, Function<BinaryOperator<Integer>, Integer>>> someComputation = new Function<Integer, Function<Integer,Function<BinaryOperator<Integer>,Integer>>>() {
        @Override
        public Function<Integer, Function<BinaryOperator<Integer>, Integer>> apply(Integer t1) {
            return new Function<Integer, Function<BinaryOperator<Integer>,Integer>>() {
                @Override
                public Function<BinaryOperator<Integer>, Integer> apply(Integer t2) {
                    return new Function<BinaryOperator<Integer>, Integer>() {
                        @Override
                        public Integer apply(BinaryOperator<Integer> t3) {
                            return t3.apply(t1, t2);
                        }
                    };
                }
            };
        }
    };

最新更新