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

时间:2015-06-14 08:12:10

标签: java lambda java-8 java-stream

我现在有一个看起来像这样的方法:

OutputDir

它向ReferralDetailsDTO对象返回一个位置ID的Map。但是,我想换掉LocationDTO对象的位置ID。

我天真地想象过这样的事情可能有用:

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

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

1 个答案:

答案 0 :(得分: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()));
}