2016-06-21 57 views
2

我一直在尋找到lambda表達式,以及如何傳遞方法,如在Java 8爭論,但我不知道它可能在我的情況:傳遞不同的方法作爲參數在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); 
+2

'LongToDoubleFunction'如何? – Tunaki

+2

LongFunction ? R是返回類型。 – gmaslowski

+0

你如何將函數作爲參數傳遞?我的類存儲算法的結果,所以我想先調用ranker.evaluate(),然後傳遞ranker.getVertexScore(Long id)。調用setScore時使用什麼語法? setScore(nodes,ranker.getVertexScore)給了我一個錯誤 – user1171426

回答

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)); 
    } 
} 
+1

類型參數''已過時。該方法可以接受一個'功能',對結果沒有任何不同。 – Holger

+0

@Holger你是對的,這個例子不依賴於它。但是一般來說,可能會有用例需要一個類型參數,而不僅僅是'?' – wero

相關問題