一个 java lambda 可以有多个参数吗?

2022-08-31 06:27:19

在Java中,是否有可能让lambda接受多个不同的类型?

即:单变量工作:

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

主要用途是在函数内部具有小的内联函数以方便使用。

我环顾了谷歌,检查了Java的函数包,但找不到。这可能吗?


答案 1

如果使用多个类型参数定义此类功能接口,则可以使用。没有这样的内置类型。(有一些具有多个参数的受限类型。

@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';
}

我在这里称之为。名称由您自行决定,只需尽量不要与Java库中的现有名称冲突即可。Function6


也没有办法定义可变数量的类型参数,如果这是你要问的。


一些语言,如Scala,定义了许多内置于此类类型中的类型,具有1,2,3,4,5,6等类型参数。


答案 2

对于具有 2 个参数的内容,可以使用 。如果你需要更多,你可以定义自己的函数接口,如下所示:BiFunction

@FunctionalInterface
public interface FourParameterFunction<T, U, V, W, R> {
    public R apply(T t, U u, V v, W w);
}

如果有多个参数,则需要在参数列表两边加上括号,如下所示:

FourParameterFunction<String, Integer, Double, Person, String> myLambda = (a, b, c, d) -> {
    // do something
    return "done something";
};

推荐