我有接口
public interface Enricher {
Mono<MyObject> enrich(MyObject obj);
}
我有这个接口的实现,它返回更新后的MyObject。
我有另一个名为CompositeEnricher的实现,它接受构造函数中的Enricher列表并执行扩展。
在非反应性的世界里,我会写这样的东西
/*
Please note that following code is applicable only if Enricher interface returns MyObject instead of Mono<MyObject>
*/
public class CompositeEnricher implements Enricher {
private final List<Enricher> enrichers;
public CompositeEnricher(List<Enricher> enrichers) {
this.enrichers = enrichers;
}
@Override
public MyObject enrich(MyObject myObject) {
MyObject updated = myObject;
for(Enricher enricher : enrichers) {
updated = enricher.enrich(updated);
}
return updated;
}
}
如何将其更改为反应式,以便Enricher的每个实现返回Mono,包括实现Enricher接口的CompositeEnricher?
我用Mono解决了这个问题。展开方法。但我必须使用enrichers。迭代器()。我想知道我是否可以在反应链中加入enrichers,而不是使用迭代器。
@Override
public Mono<User> enrich(User user) {
Iterator<Enricher> iterator = enrichers.iterator();
Function<User, Publisher<User>> enrichmentFunction = u -> iterator.hasNext() ? iterator.next().enrich(u) : Mono.empty();
return Mono.just(user)
.expand(enrichmentFunction)
.last();
}
实际上这里根本不需要单独的CompositeEnrich
类-给定一个List
Enricher composite = enrichers.stream()
.reduce((e1, e2) -> myObj -> e1.enrich(myObj).flatMap(myObj2 -> e2.enrich(myObj2)))
.get();
当然,如果需要的话,您可以将其充实到一个类中,但您也可以将其作为助手方法实现。
我正在使用espresso进行测试,在一个页面中有多个AdapterViews,例如,ID:r.id.list1,r.id.list2 如何选择特定的listview并在其上尝试onData?
问题内容: 我正在用Python编写脚本,但有一个问题: 如您所见,此代码非常多余。我试着像这样压缩它: 但是,PyQt4期望为类本身而不是实例提供类方法。因为没有为该类定义代码,所以将代码移出该块也不起作用,所以我真的不知道该怎么做。 谁能看到压缩此代码的方法? 问题答案: 有很多方法可以做到:类装饰器,元类和Mixin。 常用助手功能: 类装饰器 用法 如果不支持类装饰器,则可以尝试: 元类
我有一个这样的事件来源 我需要通过用户过去的网页访问来丰富我的事件流。(我在数据库中拥有信息,我可以将其用作Flink源) 如何确保在开始处理事件流之前,我已经准备好了扩展数据 我不想从流中进行DB调用。
null 动画/转换被禁用,但这不会阻止CircularProgressLayout动画化。 我尝试,但即使这样,在第一次单击和第二次单击之间也要等待2秒。 我还试图滥用作为黑客来确认退出应用程序。这确实有效,但这是一个黑客。我只想让浓缩咖啡点击两次。 有什么建议如何使浓缩咖啡点击两次而不等待动画?
是否可以在ViewPager中单击ListView的第一项? 如果像这样运行测试,第一项永远不会被单击。 是否有其他方法单击列表的第一项?
我目前正在使用Espresso对一个Android应用程序进行编程截图。我正在成功地使用 问题是,根据官方浓缩咖啡文档的以下假设: 消息队列为空。 当前没有正在执行任务的AsyncTask实例。 所有开发人员定义的空闲资源都是空闲的。 通过执行这些检查,Espresso大大增加了在任何给定时间只能发生一个UI操作或断言的可能性。此功能为您提供了更可靠和可靠的测试结果。 当运行时,我无法执行任何测试