java – 番石榴函数参数

以下显然有效,但我不喜欢在Tuple中包装项目,

    ImmutableMap<String, Function<Tuple2<Double>, Double>> op = new //
    ImmutableMap.Builder<String, Function<Tuple2<Double>, Double>>()
            .put("+", new Function<Tuple2<Double>, Double>() {
                @Override public Double apply(Tuple2<Double> data) {
                    return data.Val_1 + data.Val_2;
                }
            }).build();
    System.out.println(op.get("+").apply(new Tuple2<Double>(3d, 4d)));

我想写一些类似的东西:

    ImmutableMap<String, Function<Double[], Double>> op = new //
    ImmutableMap.Builder<String, Function<Double[], Double>>()
            .put("+", new Function<Double[], Double>() {
                @Override
                public Double apply(Double... data) {
                    return data[0] + data[1];
                }
            }).build();
    System.out.println(op.get("+").apply(3d, 4d));

ty是最有用的帮助.

编辑:问题解决了,开始使用:

public interface T2Function<T> {
    T apply(T Val_1, T Val_2);
}
最佳答案
我认为你最好使用自己的界面,如下所示:

public interface Operation {
  double apply(double a, double b);
}

Guava的Function是一个单个参数函数,并不适用于任何多参数.

我尝试过的另一件事是ReduceFunction< F,T>恰好可以用于这样的事情.它适用于缩小或折叠操作,看起来像:

public interface ReduceFunction<F, T> {
  T apply(T a, F b); // I can't decide on good names for the parameters =(
}

这可以让你做的事情

List<Double> doubles = ...
Double sum = reduce(doubles, MathOps.add(), 0.0);

其中MathOps.add()是ReduceFunction< Double,Double>这是显而易见的事情.

转载注明原文:java – 番石榴函数参数 - 代码日志