Java-8-Funktionen - erstellen und dann

Finde ich meine Java-Kenntnisse out-of-date mit Java 8, und es gibt viele neue features für die Sprache, die ich versuche zu lernen. Einer von Ihnen ist Funktionen, insbesondere die compose und andThen Methoden.

Ich geschrieben habe ein triviales experiment zum test der Reversibilität der compose und andThen:

/** Wraps a value 
 */
public class Wrap<T> {
    private final T value;
    private Wrap(T value) {
        this.value = value;
    }
    public static <T> Wrap<T> of(T value) {
        return new Wrap<>(value);
    }
}

static void functions() {

    Function<Integer,String> itos = i->"'"+i+"'";
    Function<String,Wrap<String>> stow = s->Wrap.of(s);

    Function<Integer,Wrap<String>> itow = itos.andThen(stow);
    Function<Integer,Wrap<String>> itow2 = stow.compose(itos);

    System.out.println(itow.apply(3));
    System.out.println(itow2.apply(3));
}

In den obigen code, wie erwartet, die 2 Funktionen itow und itow2 zu sein scheinen gleichwertig. Aber sind Sie tatsächlich gleichwertig? Tun die das gleiche Ergebnis eher durch Zufall in diesem Fall?

Der Gedanke kommt, dass beide compose und andThen Methoden existieren für einen Grund, und, dass die Funktionen oder BiFunctions vielleicht nicht immer reversibel sein, auf diese Weise. Können Sie denken, von den Fällen, in denen die Umkehrung nicht gelten würden?

  • Weiter dachte, ich lief in die Verwirrung mit BiFunction, und natürlich haben Sie nicht compose () - aus offensichtlichen Gründen. Sieht aus wie Funktionen eigentlich nicht brauchen, compose () - überhaupt, dann() ist viel intuitiver IMO.
InformationsquelleAutor NickJ | 2017-05-08
Schreibe einen Kommentar