假设我们需要转换一个hot Observable,我们需要知道它以前发出的所有项,以便能够确定下一步要发出什么。我发现最方便的解决方案是将Func1子类的一个实例传递给FlatMap,该子类具有全局状态(例如,一个映射或先前发出的项列表)。在每个调用中,Func1实例将更新其状态,并根据该状态决定返回什么。
但是,我担心这个解决方案的“美好”。据我所知,RxJava在全局和可变状态方面并不是很好,而这个解决方案似乎与之形成了对比。另一方面,我确信我的Observable实现了Observable契约,因此它似乎至少是一个工作解决方案,如果可以并发调用它,同步将解决问题。
其他可能的解决办法是:
通过扫描(在列表或地图中)传播可观察的历史。我要么对每个发出的项使用相同的对象(列表或映射),这将向流中引入一个可变对象,要么每次都复制整个对象,这将浪费大量性能。
订阅原始的Observable,从订阅服务器修改一些全局状态,并使用该全局状态在主题(转换的Observable)上发出项。我之所以这么想,是因为当它处理全局状态(和同步)时,它似乎退出了RxJava的范围。
所以问题是:我是否应该使用flatMap中具有可变状态的Func1实现来基于先前发出的项的历史来转换项(顺便说一句,它起作用了),如果不是,我应该使用什么替代方案?一般而言,我对处理可观察对象转换所需的复杂可变状态的推荐方法感到困惑。
我希望我已经清楚地表达了我的问题。否则,让我知道,我会尝试在一些具体问题和代码的帮助下描述它。
通常不建议使用包含可变状态的函数的流,因为可变状态可能会在多个订阅者
之间共享到特定的可观察
链。然而,大多数开发人员通常会在需要时汇编observable
,而很少重用相同的observable
。例如,按钮单击处理程序将创建一个observable
,该observable
通过组合将其他两个observable
分开,以异步地从两个不同的地方获取数据,然后订阅这个线程本地的observable
实例。单击一个新的按钮将使用一个新的独立的observable
来重复这个过程。
以下是有状态函数问题的解决方案:使有状态位的存在取决于订阅的单个订阅者:defer()
Observable<Integer> o = Observable.defer(() -> {
return Observable.range(1, 10)
.map(new Func1<Integer, Integer>() {
int sum;
@Override
public Integer call(Integer v) {
sum += v;
return sum;
}
});
});
o.subscribe(System.out::println);
o.subscribe(System.out::println);
由于将为每个subscribe
调用创建func1
内部类,因此其sum
字段对于每个单独的使用者都是本地的。还请注意,sum
将返回并自动装箱到一个不可变的integer
,然后可以在其他线程中自由读取它(想想observeon
),因为它完全脱离了sum
字段。
问题内容: 我最近发现了如何通过此方法在python中动态创建变量: 从而创建变量。 我的问题是,这是个好主意吗?还是应该总是提前声明变量? 问题答案: 我认为最好使用字典: 我认为这更像Python。
我有一个相当简单的管道(代码比文字更好): 我的问题是,对于给定的窗口,我必须根据以下内容计算新的状态: 上一个状态(即上一个窗口的计算状态) 接收的事件 我希望避免调用外部服务来获取上一个状态,而是获取上一个窗口的状态。有可能吗?
问题内容: 例如,这是个好主意吗? 如果您在同一台服务器上有两个虚拟主机,一个虚拟主机,一个虚拟主机,并且使用不同的Apache DocumentRoots,则这将避免当include的来源未知并且可以在任何目录中时,不必包含绝对路径。 (注意:以下部分中的文件路径是相对于Web根目录的。实际上,它们类似于,其中Web根目录在哪里) 例如:我有一个/core/init.php,它是使用来自网站(,
问题内容: 我已经多次听到您不应该执行或出于性能方面的考虑,但是无法深入了解有关它的更多信息。 我可以想象数据库随后将 所有 列都用于操作,这可能会导致性能下降,但是我不确定。有人有关于该主题的更多信息吗? 问题答案: 1.关于count(*)vs. count(其他) SQL是声明性的,您可以指定所需的 内容 。这不同于指定 如何 获得所需的东西。这意味着数据库引擎可以自由地以其认为最有效的方式
问题内容: 我公司在另一个国家/地区拥有一个开发团队,他们坚持使用Vue在我们现有平台的基础上构建新模块。我们的主要平台是基于React与Redux构建的单页面应用程序。 仅基于团队技能的混合框架是一个好主意吗?这两个框架是否可行? 问题答案: 如果主要原因是“我已经知道Vue”,那么我会拒绝。 如果他们已经知道Vue,应该很容易学会反应。 我认为这两个框架可以协同工作,您可以在使用Vue构建的R