2016-07-20 12 views
2

lambdaの使い方を簡単にし標準化するために、一般的な機能インターフェイスのセットを定義する作業を誰かがやったのかと思います。 私はコアライブラリが仕事をしたC#から来ました。Java8に標準化された汎用の機能インタフェースはありますか?

「BiFunction」について読んだところ、不器用であることが判明しました。私は、次のを思い付いたなどTriFunctionに

を拡張する場合は特に:Javaの8で

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

} 
+2

このような標準Javaライブラリには何もありません。最も近いのは 'java.util.function'パッケージのインターフェースです。 – Jesper

+5

さて、あなたの「行動」は基本的に「消費者」です。 'Function0'は' Supplier'です。 'Function1'は' Function'です。 'Function2'は' BiFunction'です。残りの部分はおそらくかなり限定された有用性がある。もし10個のパラメータを持つ関数を書いているのであれば、それを書く方が良いでしょう。 – khelwood

+0

10個のパラメータを持つ関数は、おそらくそれらの値をラップするクラスを持つべきです。 –

答えて

0

公式にのみ機能の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

+0

はい、それは私が見つけたものです。 –

+0

述語は1つの引数を受け取ります – user1121883

+0

間違い、更新、ありがとう! – paul

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または他のライブラリをあなたが独自に定義することができ、またはあなたには、いくつかの中を見つけることができます。

2

javaslang [1]は、Function0 - Function8とさらにCheckedFunction0 - CheckedFunction8を提供します。彼らは 'memoization'や 'currying'のような追加機能も提供します。

http://javaslang.io

関連する問題