Android RxJava:合并行为子对象
如何合并两个Android RxJava:合并行为子对象,android,java-8,rx-java,rx-java2,Android,Java 8,Rx Java,Rx Java2,如何合并两个BehaviorSubjects,使它们的行为像一个BehaviorSubject 我有这样的想法: class Solution { public static void main(String[] args) { Subject<List<Integer>> left = BehaviorSubject.createDefault(Arrays.asList(1, 2, 3)); Subject<List<
BehaviorSubject
s,使它们的行为像一个BehaviorSubject
我有这样的想法:
class Solution {
public static void main(String[] args) {
Subject<List<Integer>> left = BehaviorSubject.createDefault(Arrays.asList(1, 2, 3));
Subject<List<Integer>> right = BehaviorSubject.createDefault(Arrays.asList(4, 5, 6));
Single<List<Integer>> merged = left.mergeWith(right).reduce(new ArrayList<Integer>(), (l, r) -> {
List<Integer> merged1 = new ArrayList<>(l.size() + r.size());
merged1.addAll(l);
merged1.addAll(r);
return merged1;
});
merged.subscribe(System.out::println);
}
}
类解决方案{
公共静态void main(字符串[]args){
Subject left=BehaviorSubject.createDefault(Arrays.asList(1,2,3));
Subject right=BehaviorSubject.createDefault(Arrays.asList(4,5,6));
Single merged=left.mergeWith(right).reduce(新的ArrayList(),(l,r)->{
List merged1=新数组列表(l.size()+r.size());
合并1.添加全部(l);
合并1.添加全部(r);
返回合并1;
});
merged.subscribe(System.out::println);
}
}
我希望得到一些东西,[1,2,3,4,5,6]
,但是订阅
不会打印任何东西。这应该行得通;)
Subject left=BehaviorSubject.createDefault(Arrays.asList(1,2,3));
Subject right=BehaviorSubject.createDefault(Arrays.asList(4,5,6));
Observable合并=obbservable.zip(左、右,(value1、value2)->{
列表=新的ArrayList();
列表。添加全部(值1);
列表。添加全部(值2);
退货清单;
});
merged.subscribe(System.out::println);
这应该可以用;)
Subject left=BehaviorSubject.createDefault(Arrays.asList(1,2,3));
Subject right=BehaviorSubject.createDefault(Arrays.asList(4,5,6));
Observable合并=obbservable.zip(左、右,(value1、value2)->{
列表=新的ArrayList();
列表。添加全部(值1);
列表。添加全部(值2);
退货清单;
});
merged.subscribe(System.out::println);
首先,为什么要这样做?第二,reduce
需要有限的序列来生成最终结果,但受试者永远无法完成。mergeWith
与行为主体
完美配合,问题可能在于reduce
。首先,为什么要这样做?其次,reduce
需要有限的序列来生成最终结果,但受试者永远无法完成。mergeWith
与行为主体
完美配合,问题可能在于reduce
。
Subject<List<Integer>> left = BehaviorSubject.createDefault(Arrays.asList(1, 2, 3));
Subject<List<Integer>> right = BehaviorSubject.createDefault(Arrays.asList(4, 5, 6));
Observable<List<Integer>> merged = Observable.zip(left, right, (value1, value2) -> {
List<Integer> list = new ArrayList<>();
list.addAll(value1);
list.addAll(value2);
return list;
});
merged.subscribe(System.out::println);