所以我有一个清单
List<String> strings = new ArrayList<>();
strings.add("a");
strings.add("b");
strings.add("c");
strings.add("d");
strings.add("e");
strings.add("f");
strings.add("g");
我想使用RxJava
从列表中获取前3个元素并将其返回。我尝试只使用take()
函数,但会将整个列表返回给我,因为它被视为一个对象。
我成功地做了这样的事情
Observable.just(strings)
.concatMap(new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> strings) {
return Observable.from(strings);
}
})
.take(3)
.toList()
.subscribe(new Observer<List<String>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<String> strings) {
System.out.print(strings.toString());
}
});
但在我看来有许多操作要做。这是一个更好的方法吗?
答案 0 :(得分:0)
使用method reference
:
Observable.just(strings)
.concatMap(Observable::from)
.take(3)
.subscribe(System.out::println);
如果不允许使用Java 8功能,那么实际上没有任何方法可以简化它。
我在这里看到的唯一不是将它收集到List
而是收听流本身。
Observable.just(strings)
.concatMap(new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> strings) {
return Observable.from(strings);
}
})
.take(3)
.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String string) {
System.out.print(string);
}
});