【发布时间】:2016-06-21 13:43:05
【问题描述】:
我一直在研究 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);
【问题讨论】:
-
LongToDoubleFunction呢? -
LongFunction
怎么样? R 是返回类型。 -
如何将函数作为参数传递?我的类存储算法的结果,所以我想先调用 ranker.evaluate() 然后传递 ranker.getVertexScore(Long id)。调用 setScore 时使用什么语法? setScore(nodes, ranker.getVertexScore) 给我一个错误
-
您可以(可能)使用
setScore(nodes, l -> ranker.getVertexScore(l))或setScore(nodes, ranker::getVertexScore)调用它。请阅读 lambda 教程docs.oracle.com/javase/tutorial/java/javaOO/… 了解更多信息
标签: java function lambda java-8 arguments