如何将这些流式Map键从Longs转换为Objects?

ric*_*ich 3 java lambda java-8 java-stream

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

public Map<Long, List<ReferralDetailsDTO>> getWaiting() {
        return referralDao.findAll()
                .stream()
                .map(ReferralDetailsDTO::new)
                .collect(Collectors.groupingBy(ReferralDetailsDTO::getLocationId, Collectors.toList()));
    }
}
Run Code Online (Sandbox Code Playgroud)

它返回一个位置ID的Map到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()));
}
Run Code Online (Sandbox Code Playgroud)

显然,我在这里是因为它没有--Java抱怨findById方法期望Long值,而不是方法引用.有关我如何能够巧妙地解决这个问题的任何建议?提前致谢.

Era*_*ran 5

首先,将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()));
}
Run Code Online (Sandbox Code Playgroud)