2

ラムダの使用を容易にし、標準化するために、一般的な関数型インターフェイスのセットを定義する仕事を誰かがどこで行ったのだろうか。私はコア ライブラリが仕事をした C# から来ました。

「BiFunction」について読んだところ、ぎこちないことがわかりました。特にTriFunctionなどに拡張すると。

私は次のことを思いつきました:

public interface FI {
@FunctionalInterface
public interface Action<T> {
    void invoke(T arg1);
}
@FunctionalInterface
public interface Function0<TResult> {
    TResult invoke();
}
@FunctionalInterface
public interface Function1<Targ1, TResult> {
    TResult invoke(Targ1 arg1);
}
@FunctionalInterface
public interface Function2<Targ1, Targ2, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2);
}
@FunctionalInterface
public interface Function3<Targ1, Targ2, Targ3, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3);
}
@FunctionalInterface
public interface Function4<Targ1, Targ2, Targ3, Targ4, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4);
}
@FunctionalInterface
public interface Function5<Targ1, Targ2, Targ3, Targ4, Targ5, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5);
}
@FunctionalInterface
public interface Function6<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6);
}
@FunctionalInterface
public interface Function7<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, Targ7, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6, Targ7 arg7);
}
@FunctionalInterface
public interface Function8<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, Targ7, Targ8, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6, Targ7 arg7, Targ8 atg8);
}
@FunctionalInterface
public interface Function9<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, Targ7, Targ8, Targ9, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6, Targ7 arg7, Targ8 atg8, Targ9 arg9);
}
@FunctionalInterface
public interface Function10<Targ1, Targ2, Targ3, Targ4, Targ5, Targ6, Targ7, Targ8, Targ9, Targ10, TResult> {
    TResult invoke(Targ1 arg1, Targ2 arg2, Targ3 arg3, Targ4 arg4, Targ5 arg5, Targ6 arg6, Targ7 arg7, Targ8 atg8, Targ9 arg9, Targ10 arg10);
}

}
4

3 に答える 3

2

javaslang[1] はFunction0-Function8とさらにCheckedFunction0-を提供しますCheckedFunction8。「メモ化」や「カリー化」などの追加機能も提供します。

http://javaslang.io

于 2016-08-17T10:34:03.167 に答える
0

Java 8 では、公式には 4 種類の関数のみが存在します。

  Consumer: Void function
  Function: receive argument return argument
  BiFunction: Receive 2 arguments return argument
  Predicate: receive argument return boolean

ここでは、それに関するいくつかの例を見ることができます。

https://github.com/politrons/reactive/blob/master/src/test/java/stream/Functions.java

于 2016-07-20T08:11:31.590 に答える
0

あなたが見つける最も近い類似物はjava.util.functionパッケージにあります:

interface Function<T,R> { R apply(T t) }

interface Consumer<T> { void accept(T t) }

interface BiFunction<T,U,R> { R apply(T t, U u) }

など。独自に定義することも、 Google Guavaやその他のライブラリなどで見つけることもできます。

于 2016-07-20T08:12:47.247 に答える