DoubleStream和LongStream的范围方法

fid*_*idu 0 java java-8 java-stream

为什么DoubleStreamLongStream没有与以下类似的方法(IntStream中存在):

public static IntStream range(int startInclusive, int endExclusive);
public static IntStream rangeClosed(int startInclusive, int endInclusive);
Run Code Online (Sandbox Code Playgroud)

有什么特别的原因吗?

Era*_*ran 7

首先,LongStream确实有range()方法。

DoubleStream可能没有range()方法,因为数学上在2个double数字的任意范围内都有无限的实数,但是只能用double类型表示它们的有限子集。

因此,例如,当您要求DoubleStream范围为-1.0to时1.0,不清楚要获得什么。

  • 好吧,计算机的“双精度”范围是有限的,但是迭代所有值很少是程序员想要的。另一方面,`IntStream.range(0,10).asDoubleStream()`或`IntStream.range(0,10).mapToDouble(i-> i * 0.1)`确实已经起作用,对读者来说很明显,这些表达式将做什么。 (5认同)
  • 一个不太稀罕的任务是创建一系列值,例如`0.0,0.1,0.2,...,1.0`,并且一个**可以**考虑某些`range(min,max,stepSize)`方法。为了这。但是由于double的精度有限,因此有很多警告。保持这罐蠕虫的闭合可能是一件好事。 (4认同)
  • @Marco13 这正是我们不包含 `DoubleStream.range` 的原因。调用者是否想要从添加到基值的增量中派生的值,或者他们想要等间隔的值?我们认为调用者最好从(例如)“IntStream”中显式派生值,正如 Holger 上面提到的那样。 (3认同)