9

引数として関数を取り、関数を値として返すメソッドをクロージャがサポートする Java 8 でどのように書くことができますか?

4

1 に答える 1

12

Java Lambda API では、メイン クラスはjava.util.function.Functionです。

他のすべての参照と同じように、このインターフェイスへの参照を使用できます。変数として作成し、計算の結果として返すなどです。

これはあなたを助けるかもしれない非常に簡単な例です:

    public class HigherOrder {

        public static void main(String[] args) {
            Function<Integer, Long> addOne = add(1L);

            System.out.println(addOne.apply(1)); //prints 2

            Arrays.asList("test", "new")
                    .parallelStream()  // suggestion for execution strategy
                    .map(camelize)     // call for static reference
                    .forEach(System.out::println);
        }

        private static Function<Integer, Long> add(long l) {
            return (Integer i) -> l + i;
        }

        private static Function<String, String> camelize = (str) -> str.substring(0, 1).toUpperCase() + str.substring(1);
    }

複数のパラメーターを渡す必要がある場合は、composeメソッドを調べてください。ただし、その使用法は非常にトリッキーです。

一般的に、私の意見では、Java のクロージャーとラムダは基本的に構文糖であり、関数型プログラミングのすべての機能を備えているわけではないようです。

于 2013-03-04T11:04:05.987 に答える