在Java 8中将不同的方法作为参数传递

时间:2016-06-21 13:43:06

标签: java function lambda java-8 arguments

我一直在研究lambda表达式以及如何在java 8中将方法作为参数传递,但我不确定它是否可能在我的情况下:

我有多个具有类似方法的类,但方法名在某些类中有所不同。每个方法都使用Long作为表示ID的参数。 所以,我试图做出:

void setScore(List<Long> nodes, method){
    for (Long id : nodes)
        System.out.println( method(id) );
    }
}

这是我想传递的方法的两个例子,但我有:

Double DegreeScorer<Long>.getVertexScore(Long id)
Double BetweennessCentrality<Long, Long>.getVertexRankScore(Long id)

我以为我找到了使用LongConsumer接口的解决方案,但LongConsumer没有返回任何值,因此我无法存储结果。

非常感谢任何帮助。

更新 我最终得到了:

<T> void setScore(List<Long> nodes, LongFunction<T> getScore){
    for (Long id : nodes)
        System.out.println(getScore.apply(id));
    }
}

setScore(nodes, ranker::setVertexScore);

1 个答案:

答案 0 :(得分:4)

如果您的所有方法都返回Double,请使用java.util.Function<Long,Double>

void setScore(List<Long> nodes, Function<Long,Double> fn) {
    for (Long id : nodes)
         System.out.println(fn.apply(id));
    }
}

如果您有不同的返回类型,请添加泛型类型参数

<T> void setScore(List<Long> nodes, Function<Long,T> fn) {
    for (Long id : nodes)
         System.out.println(fn.apply(id));
    }
}