1. ホーム
  2. java

[解決済み] javaのラムダは1つ以上のパラメータを持つことができますか?

2022-04-14 01:56:20

質問

Javaでは、ラムダが複数の異なる型を受け入れることは可能ですか?

すなわち 単一の変数が動作します。

    Function <Integer, Integer> adder = i -> i + 1;
    System.out.println (adder.apply (10));

Varargs も動作します。

    Function <Integer [], Integer> multiAdder = ints -> {
        int sum = 0;
        for (Integer i : ints) {
            sum += i;
        }
        return sum;
    };

    //.... 
    System.out.println ((multiAdder.apply (new Integer [] { 1, 2, 3, 4 })));

しかし、私は様々なタイプの引数を受け付けるものが欲しいのです、例えば。

    Function <String, Integer, Double, Person, String> myLambda = a , b, c, d->  {
    [DO STUFF]
    return "done stuff"
    };

主な用途は、便利なように関数の中に小さなインライン関数を持たせることです。

googleで調べたり、JavaのFunction Packageを調べたりしたのですが、見つかりませんでした。これは可能なのでしょうか?

どのように解決するのですか?

複数の型パラメーターを持つような機能的なインターフェイスを定義すれば可能です。そのような組み込み型はありません。(複数のパラメータを持つ限定的な型はいくつかあります)。

@FunctionalInterface
interface Function6<One, Two, Three, Four, Five, Six> {
    public Six apply(One one, Two two, Three three, Four four, Five five);
}

public static void main(String[] args) throws Exception {
    Function6<String, Integer, Double, Void, List<Float>, Character> func = (a, b, c, d, e) -> 'z';
}

と呼んでいます。 Function6 ここで 名前は自由ですが、Javaライブラリの既存の名前とぶつからないようにすればよいでしょう。


また、型パラメーターを可変個数定義する方法もありません。


Scalaのようないくつかの言語では、1、2、3、4、5、6などの型パラメータを持つ、組み込みのこのような型を多数定義しています。