我有一个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/