“Random.ints(origin,bound)”,“。longs(origin,bound)”等的API是否缺少功能?

问题描述 投票:0回答:1

在我看来,当你使用Integer.MAX_VALUE类的边界创建一个Long.MAX_VALUEIntStream时,不可能将LongStreamjava.util.Random包含为可能的随机值。

这似乎是一种恼人的疏忽。我可以理解为什么他们试图与.doubles()版本保持一致,但它会尝试获得可能包含最大值的随机ints或longs流(但不是全部值,显然,因为有方法这样做)比它需要的复杂得多。

我错过了什么或者在其他地方讨论过这个问题吗?

java random java-stream
1个回答
1
投票

你是对的。 javadoc声明上限是独占的。这意味着你不能使用ints(lower, upper)来获得包含Integer.MAX_VALUE的流。

什么道理呢?

这可能是一个边缘情况,设计师不考虑从1开始,或者他们认为不值得复杂API的“修复”。

请注意Random.nextInt(bound)有同样的问题,因此自Java 1.2以来Random的这个缺点已经存在。因此,另一种可能性是设计者在添加ints(...)longs(...)方法时意识到了缺点,但决定不解决它,因为它会导致与旧方法的尴尬不一致。

1 - 这不太可能,IMO。 Java团队是聪明人。从源代码中可以清楚地看出,他们现在已经很清楚这一点了。


无论如何......如果你需要包含MAX_VALUEs范围的随机数流,你可以使用no-args重载(ints()longs())并过滤流。或者,您可以滚动自己的流。

© www.soinside.com 2019 - 2024. All rights reserved.