gpt4 book ai didi

java - Python 类范围,在纯 Java 中步进

转载 作者:行者123 更新时间:2023-11-29 09:38:53 25 4
gpt4 key购买 nike

In [1]: range(-100, 100, 20)
Out[1]: [-100, -80, -60, -40, -20, 0, 20, 40, 60, 80]

使用 Java 标准库而不是编写自己的函数来创建像上面那样的 Array 的最简单方法是什么?

IntStream.range(-100, 100),但是 step 被硬编码为 1。


这不是 Java: Equivalent of Python's range(int, int)? 的副本,因为我需要在数字之间进行 step(偏移量),并且想使用 java 内置库而不是第 3 方库。在添加我自己的之前,我已经检查了该问题和答案。区别很微妙,但很重要。

最佳答案

使用 IntStream::range应该有效(对于您的特殊步骤 20)。

IntStream.range(-100, 100).filter(i -> i % 20 == 0);

允许负步骤的一般实现如下所示:

/**
* Generate a range of {@code Integer}s as a {@code Stream<Integer>} including
* the left border and excluding the right border.
*
* @param fromInclusive left border, included
* @param toExclusive right border, excluded
* @param step the step, can be negative
* @return the range
*/
public static Stream<Integer> rangeStream(int fromInclusive,
int toExclusive, int step) {
// If the step is negative, we generate the stream by reverting all operations.
// For this we use the sign of the step.
int sign = step < 0 ? -1 : 1;
return IntStream.range(sign * fromInclusive, sign * toExclusive)
.filter(i -> (i - sign * fromInclusive) % (sign * step) == 0)
.map(i -> sign * i)
.boxed();
}

参见 https://gist.github.com/lutzhorn/9338f3c43b249a618285ccb2028cc4b5获取详细版本。

关于java - Python 类范围,在纯 Java 中步进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58052429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com