gpt4 book ai didi

java - IntStream.rangeClosed(x,y) 和 IntStream.range(x,y+1) 的区别

转载 作者:行者123 更新时间:2023-12-05 08:36:53 32 4
gpt4 key购买 nike

IntStream.range(x,y) 会从 x(inclusive)y(独家)IntStream.rangeClosed(x,y) 会从 x(inclusive)y(inclusive)< 返回一个流/strong>

我希望 rangeClosed(x,y) 调用 range(x,y-1)range(x,y) 来调用 rangeClosed(x,y-1)。但是在查看 range 的源代码时,它就像:

if (startInclusive >= endExclusive) {
return empty();
} else {
return StreamSupport.intStream(
new Streams.RangeIntSpliterator(startInclusive, endExclusive, false /*not closed*/), false);
}

rangeClosed 也有一个非常相似的实现,而不是 range(x,y+1)。唯一的区别是 Streams.RangeIntSpliterator 的第三个参数是 true 而不是 false,表示范围已关闭。

此 boolean 值随后用于初始化 Streams.RangeIntSpliterator 类中的 int last 字段,并针对它提到了以下注释:

1 if the range is closed and the last element has not been traversedOtherwise, 0 if the range is open, or is a closed range and allelements have been traversed

为什么需要这样的实现而不是 range 简单地调用 rangeClosed 或相反?调用 rangeClosed(x,y) 而不是 range(x,y+1) 之间有什么显着区别吗?

最佳答案

即使在正常情况下没有任何差异,但当方法的输入是 Integer 的最小/最大限制时,它会导致问题。

假设 rangeClosed(x,y) 调用 range(x,y+1)。如果您正在调用 rangeClosed(0, Integer.MAX_VALUE),那么实际的迭代次数将不是预期的迭代次数 (2147483648),而是 0,因为 Integer.MAX_VALUE + 1 将导致溢出并返回一个空流。

如果输入是 Integer.MIN_VALUE,类似的溢出会导致结果不同。

关于java - IntStream.rangeClosed(x,y) 和 IntStream.range(x,y+1) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67347204/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com