Java 使用Collectors.toMap如何转换贴图值
我有一张Java 使用Collectors.toMap如何转换贴图值,java,java-stream,collectors,Java,Java Stream,Collectors,我有一张地图 我想将列表中的对象转换为另一个对象。 即Map 我可以使用java stream Collectors.toMap()实现这一点吗 我尝试了下面的代码 Map<String, List<StartingMaterial>> startingMaterialMap = xxxx; startingMaterialMap.entrySet().stream().collect(Collectors.toMap( Map.Entry::getKey, Func
地图
我想将列表中的对象转换为另一个对象。
即Map
我可以使用java stream Collectors.toMap()实现这一点吗
我尝试了下面的代码
Map<String, List<StartingMaterial>> startingMaterialMap = xxxx;
startingMaterialMap.entrySet().stream().collect(Collectors.toMap( Map.Entry::getKey, Function.identity(), (k, v) -> convertStartingMaterialToDto(v.getValue())));
您可以使用toMap收集器,因为您的源是一个映射。但是,您必须迭代所有值,并在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())));
Map result=startingMaterialMap.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,e->e.getValue().stream())
.map->convertStartingMaterialToDto.collect(collector.toList());
我想你的意思是:
startingMaterialMap.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue().stream()
.map(this::convertStartingMaterialToDto)
.collect(Collectors.toList()))
);
以下是我解决这个问题的方法:
Map<String, List<Integer>> deposits = new HashMap<>();
deposits.put("first", Arrays.asList(1, 2, 3));
deposits.forEach((depositName, products) -> {
products.stream()
.map(myIntegerProduct -> myIntegerProduct.toString())
.collect(Collectors.toList());
});
Map depositions=newhashmap();
存款。看跌期权(“第一”,数组。asList(1,2,3));
存款。forEach((存款名称、产品)->{
products.stream()
.map(myIntegerProduct->myIntegerProduct.toString())
.collect(Collectors.toList());
});
上面的示例将列表
转换为字符串列表。
在您的示例中,convertStartingMaterialToDto方法不是myIntegerProduct.toString()
forEach
方法迭代映射中的每个键值对,您可以为键值和值参数设置一些更具体的名称,并为每个阅读它的人保留一个可理解的代码。在我的示例中:forEach((存款名称,产品))->
存款名称是键(在我的示例中是字符串),产品是键的值(在我的示例中是整数列表)
最后,您也将遍历列表,并将每个项映射到一个新类型
products.stream()
.map(myIntegerProduct->myIntegerProduct.toString())
如果碰巧map
是由groupingBy
组成的,您可以预先提供。当然,这时您不想单独使用Map
。
Map<String, List<Integer>> deposits = new HashMap<>();
deposits.put("first", Arrays.asList(1, 2, 3));
deposits.forEach((depositName, products) -> {
products.stream()
.map(myIntegerProduct -> myIntegerProduct.toString())
.collect(Collectors.toList());
});