java - lambda表达式如何初始化参数?
问题描述
我对 lamda 表达感到困惑。
JavaDStream<ConsumerRecord<String, String>> rsvpsWithGuestsStream =
meetupStream.filter(f -> !f.value().contains("\"guests\":0"));
rsvpsWithGuestsStream.foreachRDD((JavaRDD<ConsumerRecord<String, String>> r) -> {
MongoSpark.save(
r.map(
e -> Document.parse(e.value())
)
);
});
这是一个 foreachRDD 方法void foreachRDD(VoidFunction<R> foreachFunc)
,它接受一个功能接口。
在代码中,JavaRDD<ConsumerRecord<String, String>> r
作为其call
方法内部使用的参数传递。
我想知道 lambda 表达式是否r
自行初始化?map
因为它只有在初始化时才能调用。在代码中,我看不到它已经创建的任何地方。
谁能帮我理解这一点?
解决方案
lambda 表达式不会初始化任何东西。它只是一个匿名函数,它用它的参数做一些事情——假设它们已经被初始化了。我不熟悉您的用例(猜它是 Spark),但看起来 r 只是流中的元素之一,并且每个这样的元素都被传递给您的 lambda。下面是一个类似但更简单的示例:
Stream.of("a", "b", "c").forEach(el -> System.out.println(el));
这里 el 是每个元素“a”、“b”和“c”,传递给 lambda,它只是打印它。就像函数一样,lambda 对其参数以及它们是否已初始化一无所知 - 在上述情况下,这取决于调用者 - forEach 方法。
推荐阅读
- javascript - 通过单击按钮从 JSON 对象中按 id:number 删除元素
- postgresql - 使用 node-postgress 连接到 PostgreSQL@localhost 有困难(错误:28000)
- c - 如何打印(或转储)任何类型的十六进制指针?
- javascript - 使用 Iframe 的 HTML 视频网址在 Android 版本 4.4.2 上不起作用
- php - 如何在自定义 html 消息出错时退出 php
- android - AdapterView 不支持 Android 8.1/9.0 removeView(View)
- json - 可以将正则表达式与 JSON 和 AJAX 一起使用吗?
- javascript - Mongodb $graphLookup 构建层次结构
- node.js - NodeJS - 抛出错误作为控制流的一种方式是什么?
- javascript - Html5 canvas - 翻译功能异常