【发布时间】:2018-03-20 13:17:22
【问题描述】:
为了尝试深入理解java流和拆分器,我有一些关于拆分器特性的微妙问题:
Q1:Stream.empty() 与 Stream.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, DISTINCT -
LongStream.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 是有意义的,但其他两个没有意义。为什么?
如果有人对拆分器有深入的了解,我将不胜感激。谢谢。
【问题讨论】:
-
有人投票以“太宽泛”结束这个问题,我也很想这样做,因为它看起来像是六个问题合二为一。另一方面,可能对所有这些细节都有一个全面的解释......
-
@Nicolai 我最初投了票……但它太好了,不能关闭,所以我收回了它。对于这么好的问题,我喜欢这个“一体式”。除了一些 Oracle 用户(Stuart?或 Brian?),我只希望 Holger 知道这些用户的确切本质。热切地等待着。 :)
-
我了解
.mapToObj()可能会丢失 NONNULL、IMMUTABLE 和 DISTI[N]CT。为什么不排序? -
@shmosel 好点!没有想到它可能会破坏排序。不错!
标签: java java-8 java-stream spliterator