parallelstream().map().map() 是做什么的?

what does parallelstream().map().map() do?

我有一个带有编码对象的 Collection(未编码时它们很大),我想知道如果我做类似的事情会发生什么:

codes.parallelStream().map(code -> decode(code)).map(obj -> do1(obj) * do2(obj));

因为我没有找到更多关于这种结构的信息,我想这首先解码所有元素,然后才执行真正的任务,但另一方面它会更合乎逻辑(并且内存友好在大对象的情况下)在 parallelStream 的情况下,如果它会同时为每个元素执行两个映射,就像如果有站立:

codes.parallelStream().map(code -> { obj = decode(code); return do1(obj) * do2(obj); });

任何人都可以帮助我了解这是如何工作的吗?

map 操作被延迟评估。因此,第一个 map 调用中的 decode 操作仅在编码对象由 Stream 的终端操作评估时才会执行。因此,您的 I suppose this first decodes all elements and only afterwards performs the real task 假设是错误的,因为终端操作可能只需要处理源集合中的少数元素,因此大多数编码元素都不会执行 2 map 操作在这种情况下。

仅当它需要所有元素(例如 sorted() 必须遍历所有元素),或者如果它先于一个中间操作之前,才可以为 Stream 的所有元素处理中间流操作需要所有元素(例如在 ...map().sorted()... 中,执​​行 sorted() 需要首先对 Stream 的所有元素执行 map())。

您的两个代码片段的行为应该相似,但第一个代码片段更具可读性。