Java 从多个请求获取具有id和响应正文的映射

Java 从多个请求获取具有id和响应正文的映射,java,retrofit,rx-java,retrofit2,rx-java2,Java,Retrofit,Rx Java,Retrofit2,Rx Java2,早上好 我有一个RESTAPI。在那里,我可以从给定的id获取名称: @GET("warehouse/{wid}/name") Observable<Response<String>> getWarehouseName(@Path(WAREHOUSE_ID) String wid); @GET(“仓库/{wid}/name”) 可观察的getWarehouseName(@Path(WAREHOUSE_ID)字符串wid); 我已实现此方法,请在我的客户端中获取名称:

早上好

我有一个RESTAPI。在那里,我可以从给定的id获取名称:

@GET("warehouse/{wid}/name")
Observable<Response<String>> getWarehouseName(@Path(WAREHOUSE_ID) String wid);
@GET(“仓库/{wid}/name”)
可观察的getWarehouseName(@Path(WAREHOUSE_ID)字符串wid);
我已实现此方法,请在我的客户端中获取名称:

protected Observable<String> getNameObservable(final String wid) {
if (wid == null) {
    throw new IllegalArgumentException("wid is null");
}
return warehousesService.getWarehouseName(wid).subscribeOn(Schedulers.newThread())
        .flatMap(response -> {
            try {
                CommonResponseChecks.checkResponse(response);
                return Observable.just(response.body());
            } catch (NotFoundException e) {
                return Observable.error(e);
            }
        });
}
protected Observable getNameObservable(最终字符串wid){
if(wid==null){
抛出新的IllegalArgumentException(“wid为空”);
}
返回WarehouseService.getWarehouseName(wid).subscribeOn(Schedulers.newThread())
.flatMap(响应->{
试一试{
CommonResponseChecks.checkResponse(响应);
返回Observable.just(response.body());
}捕获(未发现异常){
返回可观测误差(e);
}
});
}
现在我想用rxjava实现一个方法,该方法获取id列表作为参数,并返回一个map
publicmap getNames(collectionwids)
我有以下方法来获取姓名列表:

public Maybe<List<String>> getNames(Collection<String> warehouseIds) {
    return Observable.fromIterable(warehouseIds).subscribeOn(Schedulers.newThread())
            .flatMapMaybe(wid -> getName(wid)).toList().toMaybe();
}
public-getNames(集合仓库ID){
返回Observable.fromIterable(仓库ID).subscribeOn(Schedulers.newThread())
.flatmappaye(wid->getName(wid)).toList().toMaybe();
}
但是如何将其转换为地图呢

对不起,我的英语不好;)


致以最诚挚的问候

也许您正在寻找这样的产品:

public Map<String, String> getNames(Collection<String> wids) {
    return Observable.fromIterable(warehouseIds)
        .subscribeOn(Schedulers.newThread())
        .collect(Collectors.toMap(wid-> wid, wid -> getName(wid)));
}
publicmap getNames(集合wids){
返回可观察。从可观察(仓库ID)
.subscribeOn(Schedulers.newThread())
.collect(Collectors.toMap(wid->wid,wid->getName(wid));
}

也许您正在寻找这样的产品:

public Map<String, String> getNames(Collection<String> wids) {
    return Observable.fromIterable(warehouseIds)
        .subscribeOn(Schedulers.newThread())
        .collect(Collectors.toMap(wid-> wid, wid -> getName(wid)));
}
publicmap getNames(集合wids){
返回可观察。从可观察(仓库ID)
.subscribeOn(Schedulers.newThread())
.collect(Collectors.toMap(wid->wid,wid->getName(wid));
}

在地图中有键和值。但是你的输入只提供了一件事——ID。那么,在您的映射中,什么是键,什么是值?我想将
wid
getName(wid)
result连接在一个映射中,您有键和值。但是你的输入只提供了一件事——ID。那么,在您的地图中,什么是键,什么是值呢?我想将
wid
getName(wid)
结果连接起来。我已经尝试了好几天了。但我没有让它运行。你有一个工作的例子给我吗?这个例子不起作用<代码>收集器#toMap看起来像是java8而不是rxjava。是的,它是java8-您使用哪个jave版本?您使用什么版本的rxjava以及如何安装它-通过maven依赖关系?我的java版本是8(稍后可能是7(android))。但是对于流媒体,我使用rxjava和RX2。版本是2.1.4,带有gradle(maven dependency),很抱歉,我现在很忙,没有时间去了解rxjava并尝试一些东西。我已经尝试了好几天了。但我没有让它运行。你有一个工作的例子给我吗?这个例子不起作用<代码>收集器#toMap看起来像是java8而不是rxjava。是的,它是java8-您使用哪个jave版本?您使用什么版本的rxjava以及如何安装它-通过maven依赖关系?我的java版本是8(稍后可能是7(android))。但是对于流媒体,我使用rxjava和RX2。版本是2.1.4,带有gradle(maven dependency),很抱歉,我现在很忙,没有时间去了解rxjava并尝试一些东西。