当前位置: 首页 > 知识库问答 >
问题:

Stream API,有没有办法使用instream.range?迭代降序[复制]

东方海
2023-03-14

例如,Instream。范围(0,10)-从索引0迭代到索引10。

Instream。范围(10,0)-但从10到0不起作用,如何使用流API实现?

共有3个答案

郤飞英
2023-03-14

如果你想重复相同的数字集,如果开始/结束被转置,那么这将取代范围,如果开始

IntStream range(int start, int end) {
    return start < end ? IntStream.range(start,end) 
                       : IntStream.range(-start+1, -end+1).map(i -> -i);
}
range(2,5).forEach(System.out::println);
2
3
4

range(5,2).forEach(System.out::println)
4
3
2

如果您希望保留(startInclusive,endExclusive)的含义,请修改为:

IntStream range2(int start, int end) {
    return start < end ? IntStream.range(start,end) 
                       : IntStream.range(-start, -end).map(i -> -i);
}

range2(5,2).forEach(System.out::println)
5
4
3

夹谷岳
2023-03-14

您不能使用range()生成下降流。Javadoc明确指定步骤是1的增量。如果有提供一个步骤的选择,那么我们可以。然而,有不同的方法可以实现相同的目标。

IntStream.iterate(10, i -> i >= 1, i -> --i)


IntStream.rangeClosed(1, 10).boxed().sorted(Comparator.reverseOrder())


IntStream.range(-10, 0).map(i -> -i)

在这三种方法中,使用迭代方法是最好的方法。

魏彦
2023-03-14

您可以使用IntStream.iterate(初始化值,hasNext,下一步):

IntStream.iterate(10, i -> i >= 0, i -> i - 1)

如果你被java 8卡住了:

IntStream.iterate(10, i -> i - 1).limit(11)
 类似资料:
  • 问题内容: 内容: 我想说的是: 问题答案: 一种方法是手动处理此问题: 使用包装(扩展) 只要设置了值,就保留()线程和值 或者,通过一些反射(和),您可以: 呼叫 调用(针对上述每个线程) 呼叫 第一是更优选的。

  • 问题内容: Go的范围可以遍历地图和切片,但是我想知道是否有一种方法可以遍历一系列数字,例如: 还是有一种方法可以像Go语言中的Ruby 类那样在Go中表示整数范围? 问题答案: 您可以并且应该只编写一个for循环。简单,明显的代码就是Go方式。

  • 例如,-从索引0迭代到索引10。 -但从10到0不起作用,如何使用流API实现?

  • 我有很多图像在绘制,我希望放入一个数组。手动将它们放入数组会花费太长的时间和代码。我想知道是否有一种方法来循环,如下所示:

  • 我目前正在开发一个Java应用程序,并努力优化其内存使用。据我所知,我正在遵循正确垃圾回收的准则。但是,似乎我的堆似乎位于其最大大小,即使它不是必需的。 当计算机无人使用时,我的程序每小时运行一次资源密集型任务。这个任务使用了大量的内存,但是在任务完成后会立即释放所有的内存。NetBeans profiler显示内存使用情况如下: 我真的很想在不使用时将所有堆空间都还给操作系统。当程序在至少一个小

  • 背景: 所以我有一个方法调用,我想保存到一个文本文件中。这样做的目的是将可运行的序列化对象保存到文本文件中,并在以后从文本文件中获取要执行的对象。 错误是: 我理解错误,Runnable是一个接口,它不能被序列化。然而,我还能做些什么来解决我的问题吗? 解决方案尝试1。错误