【发布时间】:2019-11-12 07:10:35
【问题描述】:
如果我在流上执行多个操作,它们是如何在内部计算的。
- 它的计算顺序是否与输入集合的顺序相同?
- 它是否将函数应用于所有元素,然后移动以评估下一个函数?或者它将所有功能应用于一个元素,然后是第二个元素......等等。
- 就性能而言,它与对集合执行的正常迭代有何不同。
List<Integer> ee = new ArrayList<Integer>();
Function<? super Integer, ? extends Integer> f1 = x -> x * 2;
Function<? super Integer, ? extends Integer> f2 = x -> x * x;
Function<? super Integer, ? extends Integer> f3 = x -> x / 2;
ee.stream().map(f1.compose(f2.andThen(f3))).collect(Collectors.toList());
ee.stream().map(f1).map(f2).map(f3).collect(Collectors.toList());
编辑问题以添加多个地图操作。在多个地图功能应用的情况下如何计算地图功能。在谈论非并行流时,元素的计算顺序是否仅取决于输入集合的类型(即,对于 list、linkedHashmap、sortedset 和 unordered 等是有序的)。另外,我能否对流的内部工作有更多的了解,以便更好地决定何时不建议使用流以及何时建议最多使用它们。(集合大小、序列性质等)
【问题讨论】:
-
2.流只看到一个函数。它无法分解或部分应用它。
-
您的标题显示“2 个或多个操作”,但实际上您只是将一个操作传递给流。如果您想要更多,请多次致电
map。例如。map(f1).map(f2).map(f3)/
标签: java java-8 java-stream