java - 使用 Collectors.toMap 如何转换 map 值

标签 java java-stream collectors

我有一个Map<String, List<StartingMaterial>> 我想将列表中的对象转换为另一个对象。 IE。 Map<String, List<StartingMaterialResponse>>

我可以使用java流Collectors.toMap()来做到这一点吗?

我尝试了类似下面的代码。

Map<String, List<StartingMaterial>>  startingMaterialMap = xxxx;

startingMaterialMap.entrySet().stream().collect(Collectors.toMap( Map.Entry::getKey, Function.identity(), (k, v) -> convertStartingMaterialToDto(v.getValue())));

我用来更改对象的转换代码如下所示,

private StartingMaterialResponse convertStartingMaterialToDto(StartingMaterial sm) {

    final StartingMaterialMatrix smm = sm.getStartingMaterialMatrix();
    final StartingMaterial blending1Matrix = smm.getBlending1Matrix();
    final StartingMaterial blending2Matrix = smm.getBlending2Matrix();

    return new StartingMaterialResponse(
            sm.getId(),
            sm.getComponent().getCasNumber(),
            sm.getDescription(),
            sm.getPriority(),
            String.join(" : ",
                    Arrays.asList(smm.getCarryInMatrix().getComponent().getMolecularFormula(),
                            blending1Matrix != null ? blending1Matrix.getComponent().getMolecularFormula() : "",
                            blending2Matrix != null ? blending2Matrix.getComponent().getMolecularFormula() : ""
                    ).stream().distinct().filter(m -> !m.equals("")).collect(Collectors.toList())),
            smm.getFamily(),
            smm.getSplitGroup());
}

最佳答案

您可以使用 toMap 收集器,因为您的源是 map 。但是,您必须迭代所有值并将每个值转换为 valueMapper 内的 DTO 格式。

Map<String, List<StartingMaterialResponse>> result = startingMaterialMap.entrySet().stream()
    .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().stream()
        .map(s -> convertStartingMaterialToDto(s)).collect(Collectors.toList())));

关于java - 使用 Collectors.toMap 如何转换 map 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59786684/

相关文章:

java - 为什么 Calendar.before() 和 Calendar.after() 接受对象值?

java - 在 servlet 和 java 文件之间传递值

java - 如何通过多个属性查找重复对象并合并它们?

java - 最频繁的元素流

Java 8 : AveragingDouble and mapping to object

java - 将 PostgreSQL ltree 类型与 Java ORM 层一起使用

java - 在 LibGDX 中检测圆是否与矩形的上半部分或下半部分相交

java-8 - Java 8 流和 RxJava 可观察量之间的区别

java-8 - 映射到多个键的 Java 8 Stream "collect and group by"对象

java - 如何在 Java8 中将 List<Map<String,Object>> 分组为 Map<String,List<Map<String,Object>>