2012-02-16 33 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

相关问题