为了尝试深入理解 java 流和拆分器,我对拆分器特性有一些微妙的问题:
Q1:Stream.empty()
vsStream.of()
(没有参数的Stream.of())
Stream.empty()
:缩小的, 大小的Stream.of()
: SUBSIZED, IMMUTABLE , SIZED, ORDERED
为什么Stream.empty()
没有相同的特征Stream.of()
?请注意,与 Stream.concat() 结合使用时会产生影响(特别是没有ORDERED
)。我想说这Stream.empty()
不仅应该有IMMUTABLE 和 ORDERED,还应该有DISTINCT 和 NONNULL。Stream.of()
只有一个参数具有DISTICT 也是有意义的。
Q2:LongStream.of()
没有NONNULL
刚刚注意到 NONNULL 在LongStream.of
. 不是NONNULL
所有LongStream
s,IntStream
s和DoubleStream
s的主要特征吗?
Q3:LongStream.range(,)
对比LongStream.range(,).boxed()
LongRange.range(,)
: SUBSIZED, IMMUTABLE, NONNULL , SIZED, ORDERED, SORTED , DISTINCTLongStream.range(,).boxed()
:已订制、已订制、已订制
为什么.boxed()
会失去所有这些特征?它不应该失去任何东西。
我知道这.mapToObj()
可能会丢失NONNULL、IMMUTABLE 和 DISTICT,但是.boxed()
......没有意义。
Q4:.peek()
丢失IMMUTABLE 和 NONNULL
LongStream.of(1)
: SUBSIZED, IMMUTABLE, NONNULL, SIZED, ...
LongStream.of(1).peek()
: SUBSIZED, SIZED, ...
为什么.peek()
会失去这些特征?.peek
不应该真的失去任何东西。
Q5: .skip()
,.limit()
丢失SUBSIZED, IMMUTABLE, NONNULL, SIZED
请注意,这些操作会丢失SUBSIZED, IMMUTABLE, NONNULL, SIZED。为什么?如果尺寸可用,那么计算最终尺寸也很容易。
Q6:.filter()
丢失IMMUTABLE, NONNULL
请注意,此操作也会丢失SUBSIZED, IMMUTABLE, NONNULL, SIZED。丢失SUBSIZED 和 SIZED是有意义的,但其他两个没有意义。为什么?
如果深入了解拆分器的人可以带来一些清晰度,我将不胜感激。谢谢。