传递两个参数在使用lambda的函数中

时间:2017-10-30 10:26:41

标签: java lambda java-stream

我对Java中的lambdas很新。

我已经开始使用它,因为我发现它们非常有趣 但我仍然不知道如何完全使用它们

我有一个uuids列表,对于每个uuid,我想调用一个带有两个参数的函数:first是一个字符串,第二个是uuid

我为每个uuid传递一个常量字符串

我写了以下代码,但它无效

uuids.stream()
     .map(uuid -> {"string",uuid})
     .forEach(AService::Amethod);

是另一类AService

的方法
public void Amethod(String a, UUID b) {
    System.out.println(a+b.toString());
}

2 个答案:

答案 0 :(得分:3)

lambda表达式只有一个返回值,因此{"string",uuid}不起作用。

您可以使用.map(uuid -> new Object[]{"string",uuid})返回一个数组,但AService::Amethod方法引用不会接受该数组。

在您的示例中,您可以跳过map步骤:

uuids.stream()
     .forEach(uuid -> aservice.Amethod("string",uuid));

其中aservice是您希望执行AService方法的Amethod类的实例。

答案 1 :(得分:1)

uuids.stream().forEach(uuid -> AService.Amethod("string", uuid));

可以在给定Pair类的情况下编写更接近当前代码的内容,但1)最终会得到更复杂的代码; 2)Java标准库没有一个内置的。由于2),有很多实用程序库定义了一个。例如。使用https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.html,它将是

uuids.stream()
        .map(uuid -> Pair.of("string",uuid))
        .forEach(pair -> AService.Amethod(pair.getLeft(), pair.getRight()));