【发布时间】:2020-10-06 08:39:35
【问题描述】:
目前我们正在通过以下方式将repository.findAll() 返回的列表转换为地图:
Map<Long, FooDto> fooMap=fooRepository.findAll()
.stream()
.map(fooDomainToDtoMapper::mapDomainToDto)
.collect(Collectors.toMap(fooDto::getfooId, foo -> foo));
但我们想保留repository.findAll() 返回的顺序。我们希望按降序返回记录,然后通过执行以下操作将其收集到LinkedHashmap:
Map<Long, FooDto> fooMap= fooRepository.findAll(Sort.by(Sort.Direction.DESC, "name"))
.stream()
.map(fooDomainToDtoMapper::mapDomainToDto)
//trying to do something like:
.collect(Collectors.toMap(fooDto::getfooId, foo -> foo,LinkedHashMap::new));
如果我们尝试在正常的Collectors.toMap 中收集上述降序结果,那么排序查询完全没有效果,在最终结果中看起来就像正常的选择。
【问题讨论】:
-
看看the documentation,你会发现
toMap没有接受地图供应商的三参数版本,只有四参数重载。所以你必须在地图供应商之前插入一个合并函数。
标签: java spring-boot collections java-8 spring-data-jpa