【发布时间】:2020-01-17 11:42:34
【问题描述】:
我有一个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());
}
【问题讨论】:
-
如果
Map<String, List<StartingMaterial>>是由groupingBy组成的,您可以预先提供Collectors.mappingas a downstream collector。当然,那是您不想单独使用Map<String, List<StartingMaterial>>的时候。
标签: java java-stream collectors