我有两个不同的文件,有关系:
class Foo {
String getBarId();
String message();
}
class Bar {
String id();
String description();
}
鉴于Flowable
Foo
,我必须将其与Single
的{{1}}合并,并附加字符串消息。这是非反应性代码:
Bar
如何将其移至被动?
所以我有以下功能:
public void sendMessageToBar() {
getFoo()
.collect(groupingBy(Foo::getBarId))
.entrySet()
.stream()
.collect(toMap(
entry -> getBar(entry.getKey)),
entry -> entry.getValue().stream().collect(joining(""))))
.entrySet()
.forEach((b,s) -> sendMessage(b,s));
}
public void sendMessage(Bar bar, String message) {}
Flowable<Foo> getFoo();
Single<Bar> getBar(String barId);
感谢您的帮助。
答案 0 :(得分:0)
分组过程几乎完全相同。要注意的是,分组的observable有一个方法getKey()
,可以告诉您需要使用哪个Bar
ID。然后使用Foo
运算符收集引用该Bar
的{{1}}项,将其转换为字符串并将其传递给toList()
。 sendMessage()
类只是配对值,可以在几分钟内手动滚动。
Pair<?,?>
答案 1 :(得分:0)
只需将flatMap
条形图放到sendMessage
s:
Flowable<Foo> foos = ...
foos.flatMapCompletable(foo ->
getBar(foo.getBarId())
.flatMapCompletable(bar ->
sendMessage(bar, foo.message())
)
, 1) // <-- how many concurrent getBars and thus sendMessages to allow
.subscribe(
bars -> { /** can be ignored ?! */ },
error -> { /* handle errors */ }
)
答案 2 :(得分:0)
好的,我解决了:
return getFoo()
.groupBy(Foo::getBarId)
.flatMapSingle(group - > {
final Single < String > message = group.toList().map(f - > f.stream()
.map(Foo::getMessage).collect(joining("")));
return getBar(group.getKey()).zipWith(message, Maps::
immutableEntry);
})
.flatMapCompletable(s - > sendMessage(s.getKey(), s.getValue()));