根据流的遭遇顺序进行交换操作



只要文档定义了所谓的相遇顺序,我认为有理由询问我们是否可以以某种方式反转相遇顺序。查看为我们提供的API流,除了sorted(),我没有发现任何与订购有关的内容。

如果我有一个从List产生的流,我可以交换该流的两个元素,从而产生具有修改的相遇顺序的另一个stream吗。

谈论流中的"交换"元素有意义吗?或者规范对此只字不提。

Java Stream API没有专门的操作来反转相遇顺序或成对交换元素或类似的操作。请注意,流源可以是一次性的(如网络套接字或生成的随机数流),因此在一般情况下,如果不将所有内容存储在内存中,就无法将其向后移动。排序操作实际上就是这样工作的:它将整个流内容转储到中间数组中,对其进行排序,然后执行下游计算。因此,如果实现反向操作,它也将以相同的方式工作。

对于像随机访问列表这样的特定源,您可以使用例如这个构造来创建反向流

List<T> list = ...;
Stream<T> stream = IntStream.rangeClosed(1, list.size())
                            .mapToObj(i -> list.get(list.size()-i));

最新更新