java - 如何将这些流式映射键从 Longs 转换为对象?

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

它向我返回位置 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()));
}

关于java - 如何将这些流式映射键从 Longs 转换为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30827236/

相关文章:

java - 用 java 8 foreach 替换 for 循环来更新值

java - 在 JNLP 文件中将当前目录指定为代码库

java - 在 div 中居中对齐 reCaptcha 元素

java - 如何使用 Jsoup 从 css 中提取值?

java - 尝试将字符串添加到一个字符串列表,但最终将字符串添加到两个字符串列表。

java - 如何将 Lambda 转换为简单的 Java 函数

java-8 - 部署到 tomcat 8.0.21 和 java 8 时,Spring 上下文初始化失败并出现 java.lang.IllegalArgumentException

java - 如何将条件语句与这个特定的 lambda 表达式结合起来?

c++ - 将 C++ lambda 复制到函数指针引用

java流groupBy收集器用于空键并在分组值列表上应用收集器