为了尝试深入理解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。
NONNULL
是LongStream
s,IntStream
和DoubleStream
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 是有意义的,但其他两个没有意义。为什么呢?
如果能够深入理解分裂者的人能够带来一些清晰度,我将不胜感激。感谢。