1

在 android 应用程序的上下文中,我想ReplaySubject从我从保存的包中检索的数组创建一个。

到目前为止,我有:

subject = ReplaySubject.create();
for (SomeDto dto : dtos) {
 subject.onNext(dto);
}

我希望有一种更直接的方式来避免迭代。

4

1 回答 1

1

你是说ReplaySubject吗?

如果您从包中检索的 DTO 列表是恒定的,并且订阅者在从包中检索后不需要收到更改通知,您可以只使用标准的 Observable,而无需使用主题。

List<SomeDto> dtos;    // Get list of SomeDto from bundle.
Observable<SomeDto> dtoObservable = Observable.from(dtos);

每次订阅 dtoObserbale 时,它​​都会重播所有项目。

如果您的订阅者除了初始值之外还需要通知 DTO 列表的更改,那么您的操作方式就很好。

编辑:您可能喜欢的另一个想法。从 Bundle 中检索到的 DTO 创建一个 observable。然后将其与 DTO 主题连接起来。

List<SomeDto> dtos;    // Get list of SomeDto from bundle.
ReplaySubject<SomeDto> subject = ReplaySubject.create();
Observable<SomeDto> dtoObservable = 
    Observable
        .from(dtos)
        .concatWith(subject);

// At some point later.
subject.onNext(anotherDto);

每个订阅者都将看到所有值。这是一个带有字符串的示例:

final List<String> strings = Arrays.asList("1", "2");
final ReplaySubject<String> stringsSubject = ReplaySubject.create();

final Observable<String> stringObservable =
        Observable
                .from(strings)
                .concatWith(stringsSubject);

stringObservable
        .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                logger.v("stringObservable1 - " + s);
            }
        });

stringsSubject.onNext("3");

stringObservable
        .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                logger.v("stringObservable2 - " + s);
            }
        });

stringsSubject.onNext("4");

stringObservable
        .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                logger.v("stringObservable3 - " + s);
            }
        });

stringsSubject.onNext("5");

输出以下内容:

stringObservable1 - 1
stringObservable1 - 2
stringObservable1 - 3
stringObservable2 - 1
stringObservable2 - 2
stringObservable2 - 3
stringObservable1 - 4
stringObservable2 - 4
stringObservable3 - 1
stringObservable3 - 2
stringObservable3 - 3
stringObservable3 - 4
stringObservable1 - 5
stringObservable2 - 5
stringObservable3 - 5
于 2014-08-20T14:03:52.257 回答