Rx java 如何在RxJava中重写该代码
我有下面的代码,我知道如何用RxJava方法重写它Rx java 如何在RxJava中重写该代码,rx-java,Rx Java,我有下面的代码,我知道如何用RxJava方法重写它method、stringsRepo.getStrings和objectsRepo.getObjects应返回可观察的对象 private ObjectsCollection method(){ HashMap<String, List<Object>> map = new HashMap<>(); List<String> strings = stringsRepo.getStr
method
、stringsRepo.getStrings
和objectsRepo.getObjects
应返回可观察的对象
private ObjectsCollection method(){
HashMap<String, List<Object>> map = new HashMap<>();
List<String> strings = stringsRepo.getStrings();
for (String string : strings) {
map.put(string, objectsRepo.getObjects(string));
}
return new ObjectCollection(map);
}
private objects收集方法(){
HashMap=newHashMap();
List strings=stringsRepo.getStrings();
for(字符串:字符串){
put(string,objectsRepo.getObjects(string));
}
返回新的ObjectCollection(map);
}
我将其改写如下:
public Observable<HashMap<String, List<Object>>> getObjects() {
return getStrings().flatMap(Observable::from)
.collect(HashMap::new, (Action2<HashMap<String, List<Object>>, String>) (map, s) ->
getObjects(s).subscribe(objectList -> map.put(s, objectList)));
}
private Observable<List<String>> getStrings(){
return Observable.just(new ArrayList<>());
}
private Observable<List<Object>> getObjects(String string){
return Observable.just(new ArrayList<>());
}
公共可观察的getObjects(){
return getStrings().flatMap(Observable::from)
.collect(HashMap::new,(Action2)(map,s)->
订阅(objectList->map.put(objectList));
}
私有可观察getStrings(){
返回Observable.just(newarraylist());
}
私有可观察的getObjects(字符串){
返回Observable.just(newarraylist());
}
有更正确的方法吗?我会使用
collect
操作符:
Observable
.fromIterable(stringsRepo.getStrings())
.collect(() -> new HashMap<String,List<String>>(),
(map, string) -> map.put(string, objectsRepo.getObjects(string)))
.blockingSubscribe()
.first();
可观察
.fromIterable(stringsRepo.getStrings())
.collect(()->new HashMap(),
(map,string)->map.put(string,objectsRepo.getObjects(string)))
.阻止订阅()
.first();
然而,RxJava的使用并不好——它也可以用Java 8 streams API编写。我会使用
collect
操作符:
Observable
.fromIterable(stringsRepo.getStrings())
.collect(() -> new HashMap<String,List<String>>(),
(map, string) -> map.put(string, objectsRepo.getObjects(string)))
.blockingSubscribe()
.first();
可观察
.fromIterable(stringsRepo.getStrings())
.collect(()->new HashMap(),
(map,string)->map.put(string,objectsRepo.getObjects(string)))
.阻止订阅()
.first();
然而,RxJava的使用并不好——它也可以用Java 8 streams API编写。为什么要将其作为Rx?你想解决的实际问题是什么?还有-到目前为止你尝试了什么?我刚开始学习Rx,想用Rx重写这个基本示例,但我无法理解如何将字符串和相关对象的结果与HashMapi的一个可观察对象结合在一起。在这种情况下,它肯定会有助于展示您迄今为止所拥有的内容,以便我们可以在此基础上进一步了解您的理解水平。我用我的解决方案更新了什么是
getStrings
返回?为什么要将此作为Rx?你想解决的实际问题是什么?还有-到目前为止你尝试了什么?我刚开始学习Rx,想用Rx重写这个基本示例,但我不知道如何将字符串和相关对象的结果与hashmapIn的一个可观察对象结合在一起。在这种情况下,它肯定会有助于展示您迄今为止所拥有的,以便我们可以在此基础上进一步了解您的理解水平。我用我的解决方案更新了什么是getStrings
返回?我是为Android编写的,但是它不支持Java 8,你可以用匿名类替换lambda。我是为Android编写的,但它不支持Java 8,你可以用匿名类替换lambda。