该方法应该返回从-n到n的长流,除了0。对于n = 3,流应该是-3,-2,-1,1,2,3。
哪种方法更好?
(1)
public static LongStream getLongStream(int n) {
return n == 0
? LongStream.empty()
: LongStream.concat(
LongStream.range(-n, 0),
LongStream.rangeClosed(1, n));
}
(2)
public static LongStream getLongStream(int n) {
return LongStream.concat(
LongStream.range(-n, 0),
LongStream.rangeClosed(1, n));
}
谢谢你的评论。我认为第二种变体是生成这种流的最好方法。
这是个人喜好的问题。选择您,特别是您的读者(在您之后维护您代码的人)更喜欢的版本。这里还有一个选择。我喜欢让你的需求一个数字应该被跳过在代码中更明确。
public static LongStream getLongStream(int n) {
return LongStream.rangeClosed(-n, n).filter(i -> i != 0);
}
试一试:
System.out.println(getLongStream(3).boxed().collect(Collectors.toList()));
输出:
[-3, -2, -1, 1,2,3]
运行时效率低于你的版本。Holger的评论似乎表明,对于较大的n
值,差异可能很大,尽管这取决于您使用流的目的。如果需要,您需要自己进行测量。
我认为在优化方面,第二种变体是最好的。
public static LongStream getLongStream(long n) {
return LongStream.concat(
LongStream.range(-n, 0),
LongStream.rangeClosed(1, n));
}