一段时间以来,我一直在使用Java 8 Streams。我遇到了一种情况,我需要流过一个List并将每个元素与另一个参数一起传递给静态方法。在Java 8中可以吗?
........
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()传递指定字符串?
答案 0 :(得分:6)
使用lambda表达式:
names.stream().map(name -> MyClass.createReport(name,designation))...
答案 1 :(得分:2)
您可以编写方法createReport
的{{3}}版本。
createReport
我们需要交换参数的顺序,因为每个designation
的{{1}}是相同的。另外,我们只需要调用not curried方法即可。
name
Function<String, Consumer<String>> createReportCurry = (designation) -> (name) -> {
createReport(name, designation);
};
答案 2 :(得分:0)
您还可以使用以下替代方法:
IntStream.range(0, names.size())
.forEach(i -> MyClass.createReport(names.get(i), names.get(i)));
答案 3 :(得分:0)
上面的答案非常好,但是让我们尝试解释为什么不能首先运行代码:
您的代码:
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建议的功能。