本文介绍了直接从对象列表的单通道映射到DTO列表的单通道的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
public Mono<List<AdvancesDto>> findBySearchKeys(Map<String, String> paramsMap) {
List<AdvancesDto> advDTOList= new ArrayList<>();
return advanceRepo.findAllByKeys(
tpNumber, vCode, arrivalNumber)
.collectList()
.flatMap(document -> {
AdvancesDto aa=document.get(0).dto();
advDTOList.add(aa);
if(document.get(1)!=null) {
aa = document.get(1).dto();
advDTOList.add(aa);
}
return Mono.just(advDTOList);
})
.switchIfEmpty(Mono.error(new DataException(HttpStatus.NOT_FOUND, "Record/s Not Found")))
.doOnError(error -> new DataException(HttpStatus.BAD_REQUEST, "Problem while fetching Data", error));
}
数据库正在返回预付款列表的单声道,我正在将其转换为高级列表DTO的单声道并返回给调用者。我的Advances.java已经有一个名为dto()的构建器方法,该方法将Advance对象直接转换为AdvancesDTO我希望flatMap方法中的代码执行从Advances.Java到AdvancesDTO.java的直接映射,当前代码看起来不太好,可能会给出索引越界异常
推荐答案
我认为您在代码中混淆了一些东西。如果您的数据库返回的Advance提供了将其转换为AdvancesDTO的方法,请将您的代码更改为:
public Mono<List<AdvancesDto>> findBySearchKeys(Map<String, String> paramsMap) {
return advanceRepo.findAllByKeys(
tpNumber, vCode, arrivalNumber)
.map(advances -> advances.dto()) //transfer Advances to AdvancesDTO
.collectList() //Collect them in a list.
.switchIfEmpty(Mono.error(new DataException(HttpStatus.NOT_FOUND, "Record/s Not Found")))
.doOnError(error -> new DataException(HttpStatus.BAD_REQUEST, "Problem while fetching Data", error));
}
如果您看到代码:
public Mono<List<AdvancesDto>> findBySearchKeys(Map<String, String> paramsMap) {
List<AdvancesDto> advDTOList= new ArrayList<>(); //Don't do this. collectList does this already.
return advanceRepo.findAllByKeys(
tpNumber, vCode, arrivalNumber)
.collectList() //Don't collect firts, transfer the data first then collect.
.flatMap(document -> {
AdvancesDto aa=document.get(0).dto(); // This is also wrong, document is in reality a List<Advances>, this is not a good name at all.
advDTOList.add(aa);
if(document.get(1)!=null) { // Only the first two elements? And if there is more?
aa = document.get(1).dto();
advDTOList.add(aa);
}
return Mono.just(advDTOList);
})
.switchIfEmpty(Mono.error(new DataException(HttpStatus.NOT_FOUND, "Record/s Not Found")))
.doOnError(error -> new DataException(HttpStatus.BAD_REQUEST, "Problem while fetching Data", error));
}
这篇关于直接从对象列表的单通道映射到DTO列表的单通道的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!