Scala 在列表上使用迭代器有什么好处吗

Scala 在列表上使用迭代器有什么好处吗,scala,Scala,在或列表上操作迭代器有什么好处吗 我需要知道连接两个迭代器是否比连接到列表更好 从某种意义上讲,在实际集合上使用迭代器的根本区别是什么。迭代器不是实际的数据结构,尽管它的行为与实际的数据结构类似。它只是指向某个实际数据结构的遍历指针。因此,与实际的数据结构不同,迭代器不能“返回”,即访问旧元素。完成迭代器后,就完成了 迭代器的酷之处在于,您可以给它一个映射、过滤器或其他转换元素,而不是实际修改任何现有的数据结构,它将在您下一次请求元素时应用转换 “连接”两个迭代器将创建一个新的迭代器,该迭代器将

在或列表上操作迭代器有什么好处吗

我需要知道连接两个迭代器是否比连接到列表更好


从某种意义上讲,在实际集合上使用迭代器的根本区别是什么。

迭代器不是实际的数据结构,尽管它的行为与实际的数据结构类似。它只是指向某个实际数据结构的遍历指针。因此,与实际的数据结构不同,
迭代器不能“返回”,即访问旧元素。完成
迭代器
后,就完成了

迭代器
的酷之处在于,您可以给它一个
映射
过滤器
或其他转换元素,而不是实际修改任何现有的数据结构,它将在您下一次请求元素时应用转换

“连接”两个
迭代器
将创建一个新的
迭代器
,该迭代器将包装这两个迭代器


另一方面,
列表
是实际的集合,可以重新遍历。

迭代器
不是实际的数据结构,尽管它的行为类似于迭代器。它只是指向某个实际数据结构的遍历指针。因此,与实际的数据结构不同,
迭代器不能“返回”,即访问旧元素。完成
迭代器
后,就完成了

迭代器
的酷之处在于,您可以给它一个
映射
过滤器
或其他转换元素,而不是实际修改任何现有的数据结构,它将在您下一次请求元素时应用转换

“连接”两个
迭代器
将创建一个新的
迭代器
,该迭代器将包装这两个迭代器


另一方面,
列表
是实际的集合,可以重新遍历。

因此,简而言之,唯一的进步是它是懒惰的?从抽象意义上讲,它并不是优势与劣势的对比。这是关于差异的,它只会成为优势和劣势,取决于你想做什么<代码>流
也是惰性的,但与迭代器不同,它们可以被重传。问题是,你想做什么?实际上我只是想知道,因为我必须在我的spark代码中串联列表,spark本身使用迭代器。完成mapPartition后,应该返回数据的迭代器。所以我转换回迭代器。我最初将spark迭代器转换为一个列表,因为我需要对每个分区进行批处理。通过批处理,我的意思是我有一个服务,它获取一批数据并生成一个输出。我不能按元素处理元素。我连接的原因是,批处理应用于分区的组。简而言之,将分区上的迭代器转换为列表、组,并对每个组应用批处理。每个批处理过程的输出实际上是一个由许多json对象组成的字符串,我将其转换回一个列表。因此,批处理过程对每个组的输出是一个列表。然后,我连接所有这些元素,并根据spark要求生成一个迭代器。我只是在想,我是否应该在ovoiding list和all上下些功夫,并尽可能多地留在迭代器领域。当然,当转换为列表时,需要解析所有列表。但这仅仅是开始。成本应该可以忽略一个主要的区别是,整个
列表必须存在于内存中,而
迭代器可以动态地一次生成一个元素。因此,简而言之,唯一的进步是它是懒惰的?从抽象意义上讲,这并不是优势与劣势的关系。这是关于差异的,它只会成为优势和劣势,取决于你想做什么<代码>流
也是惰性的,但与迭代器不同,它们可以被重传。问题是,你想做什么?实际上我只是想知道,因为我必须在我的spark代码中串联列表,spark本身使用迭代器。完成mapPartition后,应该返回数据的迭代器。所以我转换回迭代器。我最初将spark迭代器转换为一个列表,因为我需要对每个分区进行批处理。通过批处理,我的意思是我有一个服务,它获取一批数据并生成一个输出。我不能按元素处理元素。我连接的原因是,批处理应用于分区的组。简而言之,将分区上的迭代器转换为列表、组,并对每个组应用批处理。每个批处理过程的输出实际上是一个由许多json对象组成的字符串,我将其转换回一个列表。因此,批处理过程对每个组的输出是一个列表。然后,我连接所有这些元素,并根据spark要求生成一个迭代器。我只是在想,我是否应该在ovoiding list和all上下些功夫,并尽可能多地留在迭代器领域。当然,当转换为列表时,需要解析所有列表。但这仅仅是开始。成本应该可以忽略一个主要区别是整个
列表必须存在于内存中,而
迭代器可以动态地一次生成一个元素。