[patch] Function.compose()/andThen() vs BiFunction.compose()

Jürgen Kreileder jk at blackdown.de
Wed Apr 3 08:45:21 PDT 2013


Since http://hg.openjdk.java.net/lambda/lambda/jdk/rev/fa66ee11db44 and
http://hg.openjdk.java.net/lambda/lambda/jdk/rev/62d2a1511961Function.compose()
and BiFunction.compose() have different semantics.
The following patch renames BiFunction.compose() to BiFunction.andThen() to
bring the two interfaces in line again.  It also fixes a few JavaDoc errors.

(Btw, the code sometimes uses the superfluos public modifier in interfaces
and sometimes it doesn't.  IMHO it should be removed everywhere - at least
it should be consistent.)


# HG changeset patch
# User Jürgen Kreileder <jk at blackdown.de>
# Date 1365001269 -7200
# Node ID b6327bd4e9a27d6157e772c845ce1909d2dc0a43
# Parent  eb415ba1d51bbb6478e55ba20ac882f3dafc6de2
* Rename BiFunction.compose() to BiFunction.andThen() to bring it in line
with recent changes in Function.
* Consolidate documentation

diff --git a/src/share/classes/java/util/function/BiFunction.java
b/src/share/classes/java/util/function/BiFunction.java
--- a/src/share/classes/java/util/function/BiFunction.java
+++ b/src/share/classes/java/util/function/BiFunction.java
@@ -52,17 +52,18 @@
     R apply(T t, U u);

     /**
-     * Combine with another function producing a function which performs
both
-     * operations.
+     * Compose a new function which applies this function followed by the
+     * provided function.
      *
      * @param <W> Type of output objects from the combined function. May
be the
-     * same type as {@code <U>}.
+     * same type as {@code <T>}, {@code <U>}, or {@code <R>}.
      * @param after An additional function to be applied to the result of
this
      * function.
-     * @return A function which performs both the original function
followed by
-     * a second function.
+     * @return A function which performs this function followed by the
provided
+     * function
+     * @throws NullPointerException if after is null
      */
-    public default <W> BiFunction<T, U, W> compose(Function<? super R, ?
extends W> after) {
+    default <W> BiFunction<T, U, W> andThen(Function<? super R, ? extends
W> after) {
         Objects.requireNonNull(after);
         return (T t, U u) -> after.apply(apply(t, u));
     }
diff --git a/src/share/classes/java/util/function/Function.java
b/src/share/classes/java/util/function/Function.java
--- a/src/share/classes/java/util/function/Function.java
+++ b/src/share/classes/java/util/function/Function.java
@@ -45,7 +45,7 @@
      * @param t the input object
      * @return the function result
      */
-    public R apply(T t);
+    R apply(T t);

     /**
      * Compose a new function which applies the provided function before
this
@@ -57,9 +57,9 @@
      * applied
      * @return A function which performs the provided function followed by
this
      * function
-     * @throws NullPointerException if inner is null
+     * @throws NullPointerException if before is null
      */
-    public default <V > Function<V, R> compose(Function<? super V, ?
extends T> before) {
+    default <V > Function<V, R> compose(Function<? super V, ? extends T>
before) {
         Objects.requireNonNull(before);
         return (V v) -> apply(before.apply(v));
     }
@@ -70,13 +70,13 @@
      *
      * @param <V> Type of output objects to the combined function. May be
the
      * same type as {@code <T>} or {@code <R>}
-     * @param after An additional function to be applied before this
function is
-     * applied
-     * @return A function which performs the provided function followed by
this
+     * @param after An additional function to be applied to the result of
this
+     * function
+     * @return A function which performs this function followed by the
provided
      * function
      * @throws NullPointerException if after is null
      */
-    public default <V > Function<T, V> andThen(Function<? super R, ?
extends V> after) {
+    default <V > Function<T, V> andThen(Function<? super R, ? extends V>
after) {
         Objects.requireNonNull(after);
         return (T t) -> after.apply(apply(t));
     }
==


More information about the lambda-dev mailing list