我目前有一种方法,看起来像:

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()));
}

07-24 09:33