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

时间:2016-05-18 04:44:51

标签: java java-stream

只要the documentation定义了所谓的遭遇顺序,我认为有理由问我们是否可以某种方式反转该遭遇顺序。查看API流向我们提供的内容,除了sorted()之外,我没有找到与订购相关的任何内容。

如果我有一个流生成说来自List,我可以交换该流的两个元素,从而生成另一个stream并修改了遭遇顺序。

谈论流中的“交换”元素或规范中没有提及任何内容甚至是否有意义。

1 个答案:

答案 0 :(得分:2)

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

对于像随机访问列表这样的特定来源,您可以使用例如此构造

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