【问题标题】:Swap operation according to stream's encounter order根据流的遭遇顺序交换操作
【发布时间】:2016-09-14 09:38:52
【问题描述】:

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

如果我有一个从List 生成的流,我可以交换该流的两个元素,从而使用修改后的遭遇顺序生成另一个stream

在流中谈论“交换”元素是否有意义,或者规范对此只字未提。

【问题讨论】:

标签: java java-stream


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 2016-12-11
    • 2012-07-10
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多