当前位置: 首页 > 面试题库 >

哪些操作可以保留顺序

昌乐
2023-03-14
问题内容

TL; DR; 我正在寻找一个可以查找特定中间操作或终端操作的地方。在哪里可以找到此类文档?

编辑
这不是如何确保java8流中的处理顺序的重复项?,因为该问题未提供完整的操作列表。

该软件包的文件说:

流是否具有遇到顺序取决于源和中间操作

为了确保在整个流操作中维持顺序,您必须研究流源,所有中间操作和终端操作的文档,以了解它们是否维持顺序(或源是否在第一个顺序中具有顺序)地点)。

一切都很好,但是我应该看哪个文档?该软件包文档中的例子中提到,map保证订货,但它没有一个详尽的清单。Stream类的javadoc文档记录了一些中间操作,但不是全部。举个例子map

返回一个流,该流包括将给定函数应用于此流的元素的结果。

这是一个中间操作。

要么
filter

返回一个包含与此给定谓词相匹配的流元素的流。

这是一个中间操作。

这些都没有描述它们是否保留顺序。

这个答案声称:

实际上,默认情况下,每个中间操作都会保留一个订单。唯一的例外是:

  • unordered()删除排序约束。
  • sorted()更改顺序。

如果未明确指定,则可以假定操作保持顺序。即使distinct()也会保持顺序,尽管这会增加并行流的复杂性。

但是有没有官方文件来支持呢?

额外信用credit

实际上有两个单独的订购问题。

  1. 操作的输出是否与输入保持相同的顺序?
  2. 是在每个元素上按顺序执行的操作。

例如,并行map操作可以按任意顺序(违反2)遍历所有元素,但仍保持返回流中的顺序(遵守1)。


问题答案:

在对源代码进行了一些研究之后,我总结了以下表格:

摘自:Java流-第6部分-
Spliterator

下表显示了允许哪些操作类型修改字符指令:

|                        | DISTICTS | SORTED | ORDERED | SIZED | SHORT_CIRCUIT |
| ---------------------- | -------- | ------ | ------- | ----- | --------------|
| source stream          | Y        | Y      | Y       | Y     | N             |
| intermediate operation | PCI      | PCI    | PCI     | PC    | PI            |
| terminal operation     | N        | N      | PC      | N     | PI            |
  • Y-允许拥有
  • P-可能保留
  • C-可能会清除。
  • 我-可以注射。
  • N-无效;手术的抗癌药。

取自Java流-
流方法特征表

下表显示了每个 中间操作 / 终端操作
可以打开和关闭的特征和标志:(SHORT_CIRCUIT仅在StreamOpFlag标志上下文中是相关的)

注意:P(Preserve)标志会添加到每个单元格中,带有CI(Clear and Inject)标志的单元格除外。

|                  |  DISTINCT |  SORTED |  ORDERED |  SIZED |  SHORT_CIRCUIT |
| ---------------- | ----------| --------| ---------| -------| ---------------|
|  filter          |           |         |          |  C     |                |
|  forEach         |           |         |  C       |        |                |
|  forEachOrdered  |           |         |          |        |                |
|  allMatch        |           |         |  C       |        |  I             |
|  distinct        |  I        |         |          |  C     |                |
|  flatMap         |  C        |  C      |          |  C     |                |
|  anyMatch        |           |         |  C       |        |  I             |
|  collect         |           |         |          |        |                |
|  unOrdered       |           |         |  C       |        |                |
|  count           |  C        |  C      |  C       |  C     |                |
|  findAny         |           |         |  C       |        |  I             |
|  findFirst       |           |         |          |        |  I             |
|  flatMapToXXX    |  C        |  C      |          |  C     |                |
|  limit           |           |         |          |  C     |  I             |
|  map             |  C        |  C      |          |        |                |
|  mapToXXX        |  C        |  C      |          |        |                |
|  max             |           |         |          |        |                |
|  min             |           |         |          |        |                |
|  noneMatch       |           |         |  C       |        |  I             |
|  peek            |           |         |          |        |                |
|  reduce          |           |         |          |        |                |
|  skip            |           |         |  C       |  I     |                |
|  sorted          |           |  I      |  I       |        |                |
|  toArray         |           |         |          |        |                |
  • C -清除。
  • I -注射


 类似资料:
  • 本文向大家介绍js的哪些操作可以改变作用域链?相关面试题,主要包含被问及js的哪些操作可以改变作用域链?时的应答技巧和注意事项,需要的朋友参考一下 比较有名的是的间接调用:

  • 问题内容: 我使用ElementTree在python中编写了一个相当简单的过滤器,以调整某些xml文件的上下文。它或多或少地起作用。 但是它重新排序了各种标签的属性,我希望它不要这样做。 有谁知道我可以抛出的开关使其保持在指定的顺序? 上下文 我正在使用一个粒子物理工具,该工具具有基于xml文件的复杂但奇怪的配置系统。以这种方式设置的许多事物中包括各种静态数据文件的路径。这些路径被硬编码到现有的

  • 问题内容: Java Set是否保留顺序?有一种方法将Set返回给我,并且假定数据是有序的,但是遍历Set时,数据是无序的。有没有更好的方法来解决这个问题?是否需要更改方法以返回Set以外的内容? 问题答案: 该Set接口不提供任何订购保证。 它的子接口代表根据某种标准排序的集合。在Java 6中,有两个实现的标准容器。他们是和。 除了SortedSet接口之外,还有类。它记住元素插入到集合中的顺

  • 在现代的奔腾处理器上,似乎不再可能给处理器分支提示。假设一个像gcc这样的带有概要引导优化的概要编译器获得了关于可能的分支行为的信息,那么它能做些什么来产生执行得更快的代码呢? 我知道的唯一选择是将不太可能的分支移动到函数的末尾。还有别的吗? 更新。 http://download.intel.com/products/processor/manual/325462.pdf2a卷2.1.1节说 “

  • 我正在建立一个网站,我正在使用Spotify应用编程接口作为音乐库。我想添加更多的过滤器和订单选项来搜索Traks比api允许我,所以我想知道什么轨道/歌曲数据可以从API保存到我的数据库,如艺术家名称或流行度。 我想保存:姓名、艺术家、专辑和其他一些东西。这是可能的还是违反了条款和条件? 提前感谢!

  • 我正在阅读Apache Flink的文档:https://ci.apache.org/projects/flink/flink-docs-stable/concepts/runtime.html. 正如医生提到的, 对于分布式执行,Flink将运算符子任务链接到任务中。每个任务都由一个线程执行。将运算符链接到任务中是一种有用的优化:它减少了线程到线程切换和缓冲的开销,并在减少延迟的同时提高了整体吞