functional java - 通过调用成员函数进行转换

时间:2012-02-16 01:53:04

标签: java functional-programming functional-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中做类似的事情,即通过在每个对象上调用_2()方法来转换Product-3(fj.P3)的列表

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获得第二个元素,那就是另一个方法。

问题是......如果红宝石中没有可用的机制,那么最通用的方法是什么?

1 个答案:

答案 0 :(得分: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);