当前位置: 首页 > 知识库问答 >
问题:

序列流与共享状态

霍财
2023-03-14

javadoc forjava.util.stream意味着流管道中的“行为操作”通常必须是无状态的。然而,它所展示的如何不编写管道的示例似乎都涉及并行流。

这在多大程度上适用于顺序流?

List<SomeClass> list = ...;
Map<SomeClass, String> map = new HashMap<>();
list.stream()
    .filter(x -> [some boolean expression])
    .forEach(x -> {
         if (map.containsKey(x) {
             throw new UserDefinedException("duplicates detected in input");
         } else {
             map.put(x, aStringFunction(x));
         }
     });

我的问题是:我紧张是对的,还是上面的代码值得信任?

假设filter()中的表达式使用了某种共享状态。当使用顺序流时,我们能相信它会正常工作吗?

共有1个答案

斜瑞
2023-03-14

根据定义,顺序流执行调用者线程中的所有内容,因此,如果您将来不打算并行化您的流,您可以安全地使用共享状态,而无需额外的同步和并发安全集合。所以当前的代码是安全的。然而请注意,它只是看起来很脏。

 类似资料:
  • 问题内容: 请考虑以下代码: 这给出了输出 但是,我希望它能给 ..因为在调用触发方法时h.id已更改为“ B”。 似乎是在启动单独的进程时创建了主机实例的副本,因此原始主机中的更改不会影响该副本。 在我的项目中(当然,要更详细地说明),主机实例字段有时会更改,并且由在单独的进程中运行的代码触发的事件可以访问这些更改很重要。 问题答案: 多处理在不同的 流程中 运行东西。事物在发送时 不被 复制几

  • 哪里使用无锁数据结构更好,哪里使用基于'mutex'和'condition_variables'的简单实现更好?

  • 使用时有点卡住了。如果我把它放在before窗口上,它似乎可以正常工作,但如果放在窗口的“apply”函数之后,它就会失败。 我正在测试两个流,主功能在不断摄取数据和控制流模型在更改模型的要求。 我能够在中正确设置并查看b0/b1,但是始终可以看到b0和b1在初始化时设置为0。 我是不是漏了什么明显的东西?

  • 看来我在路由之间共享信息时遇到了问题。 传递信息的骆驼模式是什么? 我查看了交易所属性,但我认为这在路线之间并没有停留...... 例如: 一个文件有一个文件有一些配置,我有一个路由来读取这个文件,还有几个其他路由将根据配置进行操作, 我该如何完成此操作? 我曾想过将值放入单例bean中,但这看起来有点难看。。。

  • 虽然消息传递是一个很好的处理并发的方式,但并不是唯一一个。再一次思考一下 Go 编程语言文档中口号的这一部分:“通过共享内存通讯”: What would communicating by sharing memory look like? In addition, why would message passing enthusiasts not use it and do the opposi

  • 有没有一种方法可以使用android和facebook sdk在facebook messenger中共享文本?