我目前有一种方法,看起来像:
public Map<Long, List<ReferralDetailsDTO>> getWaiting() {
return referralDao.findAll()
.stream()
.map(ReferralDetailsDTO::new)
.collect(Collectors.groupingBy(ReferralDetailsDTO::getLocationId, Collectors.toList()));
}
}
它向我返回了位置ID到ReferralDetailsDTO对象的映射。但是,我想换出LocationDTO对象的位置ID。
我曾经天真地想象过这样的事情可能会起作用:
public Map<Long, List<ReferralDetailsDTO>> getWaiting() {
return referralDao.findAll()
.stream()
.map(ReferralDetailsDTO::new)
.collect(Collectors.groupingBy(locationDao.findById(ReferralDetailsDTO::getLocationId), Collectors.toList()));
}
显然,我在这里是因为它不会-Java抱怨findById方法期望Long值,而不是方法引用。关于如何整齐地解决此问题的任何建议?提前致谢。
最佳答案
首先,将Map的键类型从Long更改为您的相关类(是LocationDTO
还是其他类?)
其次,对查找使用lambda表达式而不是方法引用:
public Map<LocationDTO, List<ReferralDetailsDTO>> getWaiting() {
return referralDao.findAll()
.stream()
.map(ReferralDetailsDTO::new)
.collect(Collectors.groupingBy(r -> locationDao.findById(r.getLocationId()));
}