第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類似于 Python 的范圍,在純 Java 中步進

類似于 Python 的范圍,在純 Java 中步進

qq_花開花謝_0 2023-08-16 18:00:50
In [1]: range(-100, 100, 20) Out[1]: [-100, -80, -60, -40, -20, 0, 20, 40, 60, 80]Array使用 Java 標準庫而不是編寫自己的函數來創(chuàng)建像上面這樣的最簡單方法是什么?有IntStream.range(-100, 100),但步驟被硬編碼為 1。這不是 Java 的重復:相當于 Python 的 range(int, int)?,因為我需要step數字之間的(偏移量)并且想要使用 java 內置庫而不是第 3 方庫。在添加我自己的問題和答案之前,我已經檢查了該問題和答案。差異很微妙但很重要。
查看完整描述

4 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

使用IntStream::range應該有效(對于您的特殊步驟20)。

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

允許負步驟的一般實現(xiàn)可能如下所示:

/**

?* 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();

}

查看完整回答
反對 回復 2023-08-16
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

IntStream::iterate使用種子(自 JDK9 起可用)可以實現(xiàn)相同的效果,IntPredicate并且IntUnaryOperator.?使用輔助方法,它看起來像:

public?static?int[]?range(int?min,?int?max,?int?step)?{?
???????return?IntStream.iterate(min,?operand?->?operand?<?max,?operand?->?operand?+?step)
????????????????.toArray();
}


查看完整回答
反對 回復 2023-08-16
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

另一種方式:

List<Integer>?collect?=?Stream.iterate(-100,?v?->?v?+?20).takeWhile(v?->?v?<?100)
????.collect(Collectors.toList());

類似版本IntStream

List<Integer>?collect?=?IntStream.iterate(?-100,?v?->?v?+?20).takeWhile(v?->?v?<?100)
????.boxed().collect(Collectors.toList());

上面的代碼可以更改為(使用IntStreamStream

List<Integer>?collect?=?Stream.iterate(-100,?v?->?v?<?100,?v?->?v?+?20)
????.collect(Collectors.toList());


查看完整回答
反對 回復 2023-08-16
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

最好只迭代必要的序列。

IntStream.range(-100 / 20, 100 / 20).map(i -> i * 20); // only iterate [-5, 5] items


查看完整回答
反對 回復 2023-08-16
  • 4 回答
  • 0 關注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號