我的Spring Boot服务方法中有一个List结果,如下所示:
Country:
String name;
List<State> states;
State:
String name;
Long population;
List<Town> towns;
Town:
String name;
我从存储库中返回国家/地区列表,其中包含每个国家/地区的所有相关州/省和城镇日期。我希望将此数据Map到DTO,如下所示:
public class CountryDTO {
private Long id;
private String name;
private Long population; //population sum of states by country
private List<Town> towns;
//constructor
}
那么,我怎样才能正确地将我的国家实体Map到这个CountryDTO呢?我需要以下数据:
国家名称每个国家的人口总和每个国家的城镇
- 更新:**以下是我的服务方法,我尝试使用Java Stream和ModelMapper,但无法返回所需的值:(
List<CountryDTO> countries = countryRepository.findAll().stream()
.flatMap(x -> x.getStates().stream())
.map(x -> new CountryDTO(x.getCountry(), <-- need to return sum of population here -->, ObjectMapperUtils.mapAll(x.getTowns(), TownDTO.class)))
.toList();
2条答案
按热度按时间a8jjtwal1#
Stream#mapToInt
获得所有状态数,然后使用.sum
将它们相加。Stream#flatMap
可用于将每个州的所有城镇合并到单个流中。nwo49xxi2#
没有完全得到您的问题,如果您分享API返回的确切响应,可能会更有帮助。
但是,从用例来看,如果您要在响应中获取列表,您总是可以选择流式传输列表,迭代每个元素,然后使用条件/分组逻辑以所需的方式获取数据。
例如:假设您有一个
Object
类型的列表,您将其存储库层配置为ObjetRepo
。现在,如果您要获取对象列表,您可以如下所示对其进行流处理:希望这个有用。