![]() |
1
12
在示例中传递流永远不会比传递列表更好:
然后这样使用:
在这两种情况下,您都从varargs创建一个隐式数组,并将其用作数据源,因此这种惰性是想象出来的。您的数据实际上存储在数组中。 在大多数情况下,生成的笛卡尔产品流比输入要长得多,因此实际上没有理由让输入变得懒惰。例如,有五个包含五个元素的列表(总共25个),您将得到3125个元素的结果流。因此,在内存中存储25个元素不是很大的问题。实际上,在大多数实际情况下,它们已经存储在存储器中。 为了生成笛卡尔积流,您需要不断“倒带”所有流(第一个流除外)。为了倒带,流应该能够一次又一次地检索原始数据,或者以某种方式缓冲它们(你不喜欢),或者从源(集合、数组、文件、网络、随机数等)再次获取它们,然后一次又一遍地执行所有中间操作。若源操作和中间操作很慢,那个么惰性解决方案可能比缓冲解决方案慢得多。如果您的源无法再次生成数据(例如,随机数生成器无法生成之前生成的相同数字),则您的解决方案将不正确。 然而,完全懒惰的解决方案是可行的。不要使用流,而是使用流供应商:
解决方案很有趣,因为我们创建并减少供应商流,以获得最终的供应商并最终调用它。用法:
|
![]() |
2
4
或更短:
|
![]() |
3
2
您可以创建一个返回
流
聚合器在方法之外。
输出:
另请参见: Stream of cartesian product of other streams, each element as a List? |
![]() |
Keithers · 如何单击网格窗格单元格并使其执行操作? 6 年前 |
![]() |
vamsi · 如何为以下代码编写java 8流代码? 6 年前 |
![]() |
Keithers · 如何使用场景生成器使VBOX中的栅格保持静态? 6 年前 |
![]() |
en Peris · Java8列表。调用void函数 6 年前 |