java - 根据流的遇到顺序进行交换操作

标签 java java-stream

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

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

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

最佳答案

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

对于特定源(例如随机访问列表),您可以使用例如此构造来创建反向流

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

关于java - 根据流的遇到顺序进行交换操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37290495/

相关文章:

java - 如何使用Optional.ofNullable和Stream

java - Python 相当于 java ObjectOutputStream 和 ObjectInputStream?

java - 确保不同的构造函数在 Java 中具有相同的行为

java - 如何从 *.war/META-INF/MANIFEST.MF 文件中读取 manifest.mf?

java - 更紧凑的单位矩阵 lambda 表达式

java - 如何一起使用 completablefuture 和 Streams

java - 区分一字、二字和三字命令

java - 如何修改比较和操作mysql和Java中的日期时间值?

java - 是否可以将 ControlMaster 添加到 JSch 连接?

java - 如何使用 Java Stream 在 Java 中查找包含某个单词的行数?