小编典典

java lambda 可以有超过 1 个参数吗?

all

在 Java 中,是否可以让 lambda 接受多种不同的类型?

即:单变量工作:

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

可变参数也有效:

    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 的函数包,但找不到。这可能吗?


阅读 71

收藏
2022-07-17

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

我在Function6这里调用了它。该名称由您自行决定,请尽量不要与 Java 库中的现有名称发生冲突。


如果您要问的是,也无法定义可变数量的类型参数。


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

2022-07-17