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

标签 java lambda java-8

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

最佳答案

如果您定义这样一个具有多个类型参数的功能接口(interface),这是可能的。没有这样的内置类型。 (有一些具有多个参数的有限类型。)

@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 等类型参数。

关于java - Java lambda 可以有超过 1 个参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580081/

相关文章:

java - JTable 如何在插入删除或更新数据后刷新表模型。

java - 将7/2除以3.5,但是为什么在第一种情况下没有显示不兼容错误,而在第二种情况下又为什么不显示.5呢?

java - 为整个服务中使用的数据对象设计通用接口(interface)

java - 带有第 3 方附加程序的 log4j2

java - 为什么我不能使用静态变量的值?

java - 重新设计方法以使用 Java 8 Map.computeIfAbsent() 并抛出异常

c++ - 如何在 C++ 中创建匿名函数数组?

c++ - lambda 如何捕获自身以进行异步调用?

c# - 如何将 LambdaExpression 转换为类型化的 Expression<Func<T, T>>

java - 未经检查从 X 转换为扩展 X 的泛型类型