Java 双流和长流的测距方法

Java 双流和长流的测距方法,java,java-8,java-stream,Java,Java 8,Java Stream,为什么DoubleStream或LongStream没有与这些方法类似的方法(存在于IntStream中): 有什么特别的原因吗?首先,LongStream确实有range()方法 DoubleStream可能没有range()方法,因为从数学上讲,在2个double数字的任何范围内都有无限个实数,但只有有限的子集可以用double类型表示 因此,例如,当您要求在-1.0到1.0范围内的DoubleStream时,不清楚您想要得到什么。是的,这是一个非常有价值的理由。在1.0到2.0的范围内,您

为什么DoubleStreamLongStream没有与这些方法类似的方法(存在于IntStream中):


有什么特别的原因吗?

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

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


因此,例如,当您要求在
-1.0
1.0
范围内的
DoubleStream
时,不清楚您想要得到什么。

是的,这是一个非常有价值的理由。在1.0到2.0的范围内,您可以容纳多少个double?
LongStream
确实有
range
rangeClosed
@M.Prokhorov您肯定不想为一个简单的计数循环付出
iterate
takeWhile
和/或
limit
的代价。有一个…或者只是考虑为什么<代码>(double d=0;d<1;d++=0.1){} <代码>十一次迭代而不是十次迭代。OK看起来是合理的。谢谢。嗯,计算机的
double
范围是有限的,但是迭代所有值很少是程序员想要的。另一方面,
IntStream.range(0,10).asDoubleStream()
IntStream.range(0,10).mapToDouble(i->i*0.1)
已经起作用了,读者很明显,这些表达式将起到什么作用。一项并不罕见的任务是创建一系列值,如
0.0,0.1,0.2,1 ,可以考虑一些<代码>范围(min,max,步长)< /> >方法。但由于双精度
double
的精度有限,这有许多警告。关闭这罐蠕虫可能很好。@Marco13这正是为什么我们没有包括
DoubleStream.range
。调用者是希望从添加到基值的增量中获得值,还是希望以相等的间隔获得值?我们认为,调用方最好明确地从(比如)Holger上面提到的
IntStream
中派生值。@StuartMarks适度的歧义并没有阻止
numpy
使用
linspace
:这是一种非常流行的方法
public static IntStream range(int startInclusive, int endExclusive);
public static IntStream rangeClosed(int startInclusive, int endInclusive);