为了尝试深入理解 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所有LongStreams,IntStreams和DoubleStreams的主要特征吗?
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是有意义的,但其他两个没有意义。为什么?
如果深入了解拆分器的人可以带来一些清晰度,我将不胜感激。谢谢。