Java 8-从Collection.stream.map()调用一个多参数方法



我使用java 8 Streams已经有一段时间了。我遇到了一种情况,我需要通过List进行流式传输,并将每个元素与另一个参数一起传递给一个静态方法。它在java8中可能吗?

........
String designation = "Engineer";
List<String> names = new ArrayList<>();
names.add("ABC");
names.add("DEF");
names.add("GHI");
names.stream().map(MyClass::createReport);
..........
class MyClass {
public static void createReport(String name, String designation) {
System.out.println(name+"t"+designation);
}
}

如何通过stream((.map((传递指定字符串?

使用lambda表达式:

names.stream().map(name -> MyClass.createReport(name,designation))...

您可以编写方法createReport的当前版本。

CurriedcreateReport

我们需要交换参数的顺序,因为每个namedesignation是相同的。此外,我们只需要调用not curried方法。

Function<String, Consumer<String>> createReportCurry = (designation) -> (name) -> {
createReport(name, designation);
};

行动中

names.stream().forEach(createReportCurry.apply(designation))

您也可以使用以下选项:

IntStream.range(0, names.size())
.forEach(i -> MyClass.createReport(names.get(i), names.get(i)));

上面的答案很好,但让我们首先解释一下为什么不能运行代码:

您的代码:

names.stream().map(MyClass::createReport);names.stream().map(MyClass::createReport);

JVM意味着什么

names.stream().map(MyClass::createReport);names.stream().map(name -> MyClass.createReport(name));

解决方案使用基本lamba作为@Eran,或使用@Roman建议的函数。