Rx java 实施定制主题<;T、 E>;在RxJava中
我有一个Rx java 实施定制主题<;T、 E>;在RxJava中,rx-java,Rx Java,我有一个PublishSubject,它接收Strings并发出Articles private PublishSubject<String> articleSubject; public Observable<Article> newArticleSubject() { articleSubject = PublishSubject.create(); return articleSubject.flatMap(new Func1<String,
PublishSubject
,它接收String
s并发出Article
s
private PublishSubject<String> articleSubject;
public Observable<Article> newArticleSubject() {
articleSubject = PublishSubject.create();
return articleSubject.flatMap(new Func1<String, Observable<Article>>() {
@Override
public Observable<Article> call(String articleId) {
return dataModel.getArticleById(articleId);
}
});
}
articleSubject.onNext("1234");
但是,如何处理构造函数中的
OnSubscribe
?我必须保留订户和所有的东西吗?是否有办法将其委托给出版主题
?我找到了一个通用解决方案:
public abstract class SubjectBinding<T, E> implements Observer<T> {
private PublishSubject<T> origin;
public SubjectBinding() {
this.origin = PublishSubject.create();
}
@Override
public void onCompleted() {
origin.onCompleted();
}
@Override
public void onError(Throwable e) {
origin.onError(e);
}
@Override
public void onNext(T t) {
origin.onNext(t);
}
public Observable<E> asObservable() {
return origin.flatMap(new Func1<T, Observable<E>>() {
@Override
public Observable<E> call(T t) {
return asObservable(t);
}
});
}
protected abstract Observable<E> asObservable(T t);
}
它发出文章
s:
public Observable<Article> newArticleSubject() {
return new ArticleSubject().asObservable();
}
公共可观察的newArticleSubject(){
返回新的ArticleSubject().asObservable();
}
这感觉像是一个XY问题-您试图通过使用主题解决什么问题?我想要一个主题,当接收到字符串(subject.onNext(“1”)
)时,它会发出一篇文章。是的,这从最初的问题中非常清楚。然而,这本身就是“我想做X,我可以通过Y来做”。你为什么特别需要一个主题?为什么你不能有一个可观察的链呢?如果你真的想用主题来做这件事,我的博文是关于如何创建自定义Subject
s的。
private class ArticleSubject extends SubjectBinding<String, Article> {
@Override
protected Observable<Article> asObservable(String s) {
return dataModel.getArticleById(s);
}
}
articleSubject.onNext("1234");
public Observable<Article> newArticleSubject() {
return new ArticleSubject().asObservable();
}