深入理解分裂者特征

时间:2017-10-09 10:46:21

标签: java java-8 java-stream spliterator

为了尝试深入理解java流和分裂器,我对分裂器特征有一些微妙的问题:

Q1:Stream.empty() vs Stream.of() (没有args的Stream.of())

  • Stream.empty() SUBSIZED,SIZED
  • 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

注意到LongStream.of中没有NONNULL。 NONNULLLongStream s,IntStreamDoubleStream s的主要特征,不是LongStream.range(,)吗?

问题3:LongStream.range(,).boxed() vs LongRange.range(,)

  • LongStream.range(,).boxed() SUBSIZED, IMMUTABLE,NONNULL ,SIZED,ORDERED, SORTED,DISTINCT
  • .boxed() SUBSIZED,SIZED,ORDERED

为什么.mapToObj()会失去所有这些特征?它不应该失去任何。

我知道.boxed()可能会丢失 NONNULL,IMMUTABLE和DISTICT ,但.peek() ......没有意义。

问题4:LongStream.of(1)失去 IMMUTABLE和NONNULL

LongStream.of(1).peek() SUBSIZED,IMMUTABLE,NONNULL,SIZED,... .peek() SUBSIZED,SIZED,...

为什么.peek会失去这些特征? .skip()不应该真的失去任何。

问题5:.limit().filter()失去了 SUBSIZED,IMMUTABLE,NONNULL,SIZED

请注意,这些操作会丢失 SUBSIZED,IMMUTABLE,NONNULL,SIZED 。为什么?如果尺寸可用,那么也很容易计算最终尺寸。

问题6:<select name="price" id="priceSelect"> <option value="10">10</option> <option value="100">100</option> <option value="200">200</option> <option value="500">500</option> </select> <div id="msg"></div> 失去 IMMUTABLE,NONNULL

请注意,此操作也会丢失 SUBSIZED,IMMUTABLE,NONNULL,SIZED 。失去 SUBSIZED和SIZED 是有意义的,但其他两个没有意义。为什么呢?

如果能够深入理解分裂者的人能够带来一些清晰度,我将不胜感激。感谢。

0 个答案:

没有答案