生成包含整数(0、1,-1、2,-2、3,-3,...)的无限Stream <Integer>

bas*_*s3l 6 java eclipse java-8 java-stream

我目前正在准备考试,并且正在执行以下任务:

生成包含整数的无限流(0, 1, -1, 2, -2, 3, -3, ...)

跟随流生成普通的无限流:

Stream<Integer> infiniteStream = Stream.iterate(1, i -> i + 1);
Run Code Online (Sandbox Code Playgroud)

是否存在同时生成正数和负数的方法或lambda表达式?

Era*_*ran 7

像这样:

Stream<Integer> infiniteStream = Stream.iterate(1, i -> i > 0 ? -i : (-i + 1));
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望以0

Stream<Integer> infiniteStream = Stream.iterate(0, i -> i > 0 ? -i : (-i + 1));
Run Code Online (Sandbox Code Playgroud)

当然,这也可以使用IntStream

IntStream infiniteStream = IntStream.iterate(0, i -> i > 0 ? -i : (-i + 1));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此流是无限的,但在达到Integer.MAX_VALUE后将产生无意义的数字。一旦接受了序列的实际有限性质,就可以使用`LongStream.rangeClosed(0,Integer.MAX_VALUE * 2L + 1).mapToInt(l-&gt;-(int)((l &gt;&gt; 1)^((l &lt;&lt; 63)-(l&1))))具有很大的优势,您可以轻松高效地选择任意子序列,而不必依赖昂贵的`skip()`和`limit()`操作… (3认同)