1

私はルビーの観点からいくつかの関数型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から2番目の要素を取得したい場合、それは別のメソッドです。

質問は...ルビーで利用できるようなメカニズムがない場合、これを達成するための最も一般的な方法は何ですか?

4

1 に答える 1

1

2つのアンダースコアのように、 __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);
于 2012-02-20T00:22:46.393 に答える