2012-02-16 36 views
1

我在一些功能的Java未來但從Java功能 - 通過調用一個成員函數

紅寶石紅寶石點,你可以做這樣的事情

mapped_array = [1,2,3].map(&:to_s) 

它評估出變換變換(圖)數組通過調用to_s成員函數的每個對象

mapped_array = [] 
[1,2,3].each { |e| mapped_array << e.to_s } 

我想這樣做在Java中類似的東西,即改造產品-3(fj.P3)的列表中調用_2()方法的每個對象

List<P2<Integer, Double>> aListOfP2; 
final List<Double> costs = transform(aListOfP2, Converters.<Integer, Double>second()); 

,所以我不得不某處定義一個方法

public static final <A,B> Function<P2<A,B>,B> second() { 
    return new Function<P2<A, B>, B>() { 
     public B apply(final P2<A, B> from) { 
      return from._2(); 
     } 
    }; 
}; 

但當時如果我想要得到的第一個元素,那就是另一種方法...如果我想從P3獲得第二個元素,那是另一種方法。

問題是......如果在Ruby中沒有可用的機制,那麼完成這個的最普通的方法是什麼?

回答

1

你應該檢查出__2(),如在兩個下劃線中。

讓你的行會變成:

List<P2<Integer, Double>> aListOfP2; 
final List<Double> costs = transform(aListOfP2, P2.<Integer, Double>__2()); 

,或者你可以使用類似

final List<Double> costs = aListOfP2.map(P2.__2()).map(transform); 
+0

這是完美的,雙下劃線版本正是我想要的!我相信爲了應用第二種語法,我將不得不使用fj.data.List而不是泛型java.util.List。 – 2012-02-20 22:42:07

相關問題