gpt4 book ai didi

java - 如何在 java 8 中创建复合 lambda 表达式

转载 作者:行者123 更新时间:2023-12-03 19:04:26 24 4
gpt4 key购买 nike

我正在尝试在 Java 8 中使用 lambda 表达式。
我要写的表达式的类型是:

BiConsumer<String, BiConsumer<Boolean,Integer>> cc2;

我应该能够编写一个看起来有点像这样的表达式:
cc2 = (s,(b,i)) -> { System.out.println(s+b+i); }; // this does not compile

不幸的是,我找不到必须使用的确切语法。

最佳答案

类型BiConsumer<String, BiConsumer<Boolean,Integer>>声明 BiConsumer ,也就是说一个消费者消费了 2 个,并且只有 2 个参数。在这两个参数中,一个声明为 String 类型。 ,而另一个声明为 BiConsumer<Boolean,Integer> .

因此,这将编译:

BiConsumer<String, BiConsumer<Boolean,Integer>> cc2 = (s, c) -> {};
s将是 String 类型和 c将是 BiConsumer 类型. c 的参数将需要被捕获并且不会是 lambda 参数。

但这不是您想要的:您实际上想要使用 3 个参数,而不是 2 个。此要求没有内置功能接口(interface),但您可以自己制作:
@FunctionalInterface
interface TriConsumer<A,B,C> {
void accept(A a, B b, C c);
}

然后,您可以将其与
TriConsumer<String,Boolean,Integer> tri = (s, b, i) -> System.out.println(s+b+i);

或者,您可以使用 currying通过声明 Function这需要 String并将返回双消费者:
Function<String, BiConsumer<Boolean,Integer>> f = s -> (b, i) -> System.out.println(s+b+i);
f.apply("foo").accept(true, 1);

关于java - 如何在 java 8 中创建复合 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38116815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com