以下是一小段代码:
val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.flatMapIterable { list: List<Int> -> list }
.subscribeBy(
onNext = { l("on next", it) },
onComplete = { l("on complete") }
)
为什么onComplete
不会在这里打电话?我应该怎么做才能使用这段代码?因为在原始代码中我不能使用.toList()
方法。
答案 0 :(得分:3)
除非BehaviorSubject
被调用,否则表单中的onComplete
是无限来源。因此flatMapIterable
将无法完成,您的onComplete
处理程序将永远不会被调用。
所以你要么完成BehaviorSubject
:
val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.flatMapIterable { list: List<Int> -> list }
.subscribeBy(
onNext = { l("on next", it) },
onComplete = { l("on complete") }
)
subject.onComplete() // <-----------------------------------------------------
或者你最多只拿一件物品
val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.take(1) // <----------------------------------------------------------
.flatMapIterable { list: List<Int> -> list }
.subscribeBy(
onNext = { l("on next", it) },
onComplete = { l("on complete") }
)