如何在Java中获取一系列值

ric*_*ric 1 java generics range

我想获取一系列值,例如Python中的range函数。

# Python range
a = range(0,1.0,0.01)
b = range(5,10,2)
Run Code Online (Sandbox Code Playgroud)

在Java中,希望得到List这样的结果。

// Java range
public class range{

    private double start;
    private double end;
    private double step;

    public range(double start,double end, double step) {
        this.start = start;
        this.end = end;
        this.step = step;
    }

    public List<Double> asList(){
        List<Double> ret = new ArrayList<Double>();
        for(double i = this.start;i <= this.end; i += this.step){
            ret.add(i);
        }

        return ret;
    }   
}
Run Code Online (Sandbox Code Playgroud)

但是,我认为当需要一定范围的Integer时,此代码可以计算出冗余。

您能用Java更聪明的方法或实现吗?

Aar*_*vis 5

您可以使用流来生成范围并将其收集到列表中

IntStream.range(0, 10)
         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

请注意,第一个数字为包含性,第二个为排除性。您可以使用rangeClosed方法来包含第二个参数。 http://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html#range-int-int-

其他原语还有其他类型的流(例如,请参见DoubleStream.iterate)。