Frage

Ich komme aus rublicher Sicht auf eine funktionale Java

In Ruby können Sie so etwas tun

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

Dies bewertet das Array durch Aufrufen der TO_S -Mitgliedsfunktion in jedem Objekt aus (Karte)

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

Ich würde gerne etwas Ähnliches in Java tun, nämlich eine Liste von Produkt-3 (FJ.P3), indem ich die Methode _2 () für jedes Objekt aufruft

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

Also musste ich irgendwo eine Methode definieren

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();
        }
    };
};

Aber wenn ich dann das erste Element bekommen möchte, ist das eine andere Methode ... Wenn ich das zweite Element von einem P3 erhalten möchte, ist das eine andere Methode.

Frage ist ... Wenn es keinen Mechanismus gibt, wie es in Ruby verfügbar ist, wie gut ist es der allgemeinste Weg, dies zu erreichen?

War es hilfreich?

Lösung

Sie sollten sich auschecken __2(), wie in zwei Unterstrichen.

Also würde deine Linie werden:

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

Oder Sie könnten so etwas verwenden wie

final List<Double> costs = aListOfP2.map(P2.__2()).map(transform);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top