Я учусь использовать rxjava. Как показано в коде ниже, у меня есть List<List<Person>>
, что я планирую сделать, это перебрать все списки Person
и отображать, сколько объектов типа Person
в каждом списке.
Я кодировал следующее:
.map(p->p.get(0).getName().map(r->r.toUpperCase()).orElse("NULL_VALUE"))
но, как вы видите, я всегда ссылаюсь на номер элемента 0. Как я могу ссылаться на все элементы в списке, как если бы я использовал цикл for как следующие:
for (int i = 0; i< length; i++)
p.get(i)
Надеюсь, мой вопрос ясен.
заранее спасибо
код
public static void main(String[] args) {
Observable<List<Person>> observables = Observable.create(e-> {
for(List<Person> p : Main.getPersons()) {
e.onNext(p);
}
e.onComplete();
});
observables
.map(p->p.get(0).getName().map(r->r.toUpperCase()).orElse("NULL_VALUE"))
.doOnNext(r->System.out.println("r: " + r))
.observeOn(Schedulers.io())
.subscribe(new Observer() {
@Override
public void onComplete() {
// TODO Auto-generated method stub
System.out.println("onCompleted");
}
@Override
public void onError(Throwable arg0) {
// TODO Auto-generated method stub
}
@Override
public void onNext(Object arg0) {
// TODO Auto-generated method stub
System.out.println("onNextFromObserver: " + arg0);
}
@Override
public void onSubscribe(Disposable arg0) {
// TODO Auto-generated method stub
}
});
}
private static <T> Observable<T> toObservable(T s) {
return Observable.just(s);
}
private static List<List<Person>> getPersons() {
return Arrays.asList(
Arrays.asList(new Person("Sanna1", 59, "EGY"), new Person(null, 59, "EGY"), new Person("Sanna3", 59, null)),
Arrays.asList(new Person("Mohamed1", 59, "EGY"), new Person(null, 59, "EGY")),
Arrays.asList(new Person("Ahmed1", 44, "QTR"), new Person("Ahmed2", 44, "QTR"), new Person(null, null, "QTR")),
Arrays.asList(new Person("Fatma", 29, "KSA")),
Arrays.asList(new Person("Lobna", 24, "EGY")));
}
}
лицо
public class Person {
private String name = null;
private String address = null;
private int age;
private Optional<String> optName= null;
private Optional<Integer> optAge= null;
private Optional<String> optAddress = null;
public Person(String name, Integer age, String address) {
this.optName = Optional.ofNullable(name);
this.optAge = Optional.ofNullable(age);
this.optAddress = Optional.ofNullable(address);
}
public Optional<String> getName() {
return optName;
}
public void setName(String name) {
this.optName = Optional.ofNullable(name);
}
public Optional<String> getAddress() {
return this.optAddress;
}
public void setAddress(String address) {
this.optAddress = Optional.ofNullable(address);
}
public Optional<Integer> getAge() {
return this.optAge;
}
public void setAge(int age) {
this.optAge = Optional.ofNullable(age);
}
}
обновление
public static void main(String[] args) {
Observable<List<Person>> observables =
Observable.fromIterable(Main.getPersons());
observables
//.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.concatMap(list->Observable.fromIterable(list)
.map(p->p.getName()
.map(r->r.toUpperCase()).orElse("NULL_VALUE")))
.observeOn(Schedulers.io())
.blockingSubscribe(new Observer<String>() {
@Override
public void onComplete() {
// TODO Auto-generated method stub
System.out.println("onComplete: ");
}
@Override
public void onError(Throwable arg0) {
// TODO Auto-generated method stub
System.out.println("onError: ");
}
@Override
public void onNext(Object arg0) {
// TODO Auto-generated method stub
System.out.println("onNext: ");
}
@Override
public void onSubscribe(Disposable arg0) {
// TODO Auto-generated method stub
System.out.println("onSubscribe: ");
}
});
}