根据OCP书籍,必须避免有状态操作,也就是有状态lambda表达式。书中提供的定义是,“有状态lambda表达式是指其结果取决于在管道执行过程中可能发生变化的任何状态。”
书中提供了一个例子,使用并行流和.map()函数将一组固定数字添加到同步ArrayList中。ArrayList中的顺序完全随机,这应该让我们看到,有状态lambda表达式会在运行时产生不可预测的结果。因此,在使用并行流时强烈建议避免有状态操作,以消除任何潜在的数据副作用。
他们没有展示一个无状态lambda表达式来解决同样的问题(向同步ArrayList添加数字),我仍然不明白使用map函数向空同步ArrayList填充数据的问题在哪里... 到底是哪个状态可能会在管道执行期间发生变化?他们是指ArrayList本身吗?比如当另一个线程在并行流仍在添加数字的过程中决定向ArrayList添加其他数据,从而改变最终结果?
也许有人可以为我提供一个更好的例子,展示什么是有状态lambda表达式,以及为什么应该避免使用它。非常感谢。
谢谢
书中提供了一个例子,使用并行流和.map()函数将一组固定数字添加到同步ArrayList中。ArrayList中的顺序完全随机,这应该让我们看到,有状态lambda表达式会在运行时产生不可预测的结果。因此,在使用并行流时强烈建议避免有状态操作,以消除任何潜在的数据副作用。
他们没有展示一个无状态lambda表达式来解决同样的问题(向同步ArrayList添加数字),我仍然不明白使用map函数向空同步ArrayList填充数据的问题在哪里... 到底是哪个状态可能会在管道执行期间发生变化?他们是指ArrayList本身吗?比如当另一个线程在并行流仍在添加数字的过程中决定向ArrayList添加其他数据,从而改变最终结果?
也许有人可以为我提供一个更好的例子,展示什么是有状态lambda表达式,以及为什么应该避免使用它。非常感谢。
谢谢