java - 流 (OOP) 在程序集级别上是如何表示的?
问题描述
Java 的 Stream API 或 RxJava 之类的流如何在程序集级别上表示?
IE
List<String> myList =
Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList
.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
解决方案
这是一个非常复杂的话题,几句话就可以涵盖。您可以从Brian Goetz的这篇文章开始研究,以了解 Java Stream API 的概念。之后,您将能够轻松深入。
首先仔细看看 Spliterator 抽象:
流源由称为 Spliterator 的抽象描述。顾名思义,Spliterator 结合了两种行为:访问源的元素(迭代),以及可能分解输入源以进行并行执行(拆分)。
然后看看 Stream flags :
在内部表示中,流水线的每个阶段都由流标志位图描述,该位图描述了流流水线这一阶段的元素的已知信息。Streams 使用这些标志来优化流的构造和执行。
和流管道的执行
当终端操作启动时,流实现选择一个执行计划。
对于顺序执行,Streams 构造了一个“机器”——其结构与管道结构相匹配的消费者对象链。这些消费者对象中的每一个都知道下一阶段;当它接收到一个元素(或被通知没有更多元素)时,它会将零个或多个元素发送到链中的下一个阶段。
然后,您将能够了解每个中间操作和终端操作如何在汇编级别表示。
推荐阅读
- powershell - Invoke-RestMethod: POST Assoc-Array 使用 JSON 到 WebService (System.Collections.Hashtable)
- c# - 我们需要处理 IDbDataParameter 吗?
- sql - 自定义列上的 Where 子句
- javascript - 将表格标题与数据对齐
- vb.net - X509Certificate2 仅在以管理员身份添加到当前用户存储时临时工作
- javascript - 使用stimulusjs手动强制触发以嵌套形式选择的更改事件
- php - simplexml_load_file():http://website.com/feed:563:解析器错误:未定义实体“nbsp”
- javascript - D3.js制作条形图,其中x轴代表日期,y轴代表当天的睡眠时间
- mysql - SQL 触发器(插入前)
- html - 如何在 Syncfusion SfListView 中绑定选中项