Map<String, Integer> snowCodeNumMap = ScrapApply.getDetailList().stream() .collect(Collectors.toMap(ScrapApplyDetailVO::getSnowCode, ScrapApplyDetailVO::getScrapNum, Integer::sum)); 优化下代码
时间: 2024-03-05 12:52:17 浏览: 21
对于上述代码,可以通过使用 `groupingBy` 和 `summingInt` 方法来进行优化,代码如下:
```
Map<String, Integer> snowCodeNumMap =
ScrapApply.getDetailList().stream()
.collect(Collectors.groupingBy(ScrapApplyDetailVO::getSnowCode, Collectors.summingInt(ScrapApplyDetailVO::getScrapNum)));
```
在这段代码中,首先使用 `groupingBy` 方法按照 `ScrapApplyDetailVO::getSnowCode` 的返回值进行分组,然后使用 `summingInt` 方法对分组后的 `ScrapApplyDetailVO` 对象的 `ScrapApplyDetailVO::getScrapNum` 属性进行求和。最终,返回一个 `Map<String, Integer>` 类型的结果,其中键为雪花码,值为报废数量之和。
使用 `groupingBy` 和 `summingInt` 方法进行优化,可以避免手动累加的过程,代码更加简洁和易于理解。同时,这种方式也可以提高程序的性能,因为它会使用并行流来进行分组和求和操作,从而加速程序的执行。
相关问题
Map<String, Integer> snowCodeNumMaps = ScrapApply.getDetailList().stream() .collect(Collectors.toMap(ScrapApplyDetailVO::getSnowCode, ScrapApplyDetailVO::getScrapNum, Integer::sum)); 这段代码报错
这段代码的作用是将 ScrapApply 对象的 detailList 属性转换成一个 Map 对象,其中 Map 的 key 是 ScrapApplyDetailVO 对象的 snowCode 属性,value 是 ScrapApplyDetailVO 对象的 scrapNum 属性,并且如果有多个 ScrapApplyDetailVO 对象的 snowCode 属性相同,那么对应的 value 会被相加。例如,如果有两个 ScrapApplyDetailVO 对象的 snowCode 属性都是 "001",那么它们的 scrapNum 属性的值会相加。
至于为什么这段代码会报错,需要查看具体的错误信息才能确定原因。可能是 ScrapApply 对象或 ScrapApplyDetailVO 对象没有正确的初始化,也可能是 getSnowCode 或 getScrapNum 方法返回的数据类型不正确。
Map<String, Integer> snowCodeNumMap = storageApply.getDetailsList().stream() .peek(storageApplyOrderDetailPO -> storageApplyOrderDetailPO.setStorageApplyOrderId(storageApply.getId()) .setProductStatus(StorageTypeEnum.getProductStatueByType(storageTypeEnum, storageApplyOrderDetailPO))) .collect(Collectors.toMap(StorageApplyOrderDetailPO::getSnowCode, StorageApplyOrderDetailPO::getNum, Integer::sum)); 优化下代码
可以考虑使用更加简洁的方法来实现这个流处理操作。例如,可以使用 `groupingBy` 和 `summingInt` 来实现对 `snowCode` 相同的对象进行分组求和的操作,代码如下:
```
Map<String, Integer> snowCodeNumMap = storageApply.getDetailsList()
.forEach(detail -> {
detail.setStorageApplyOrderId(storageApply.getId());
detail.setProductStatus(StorageTypeEnum.getProductStatueByType(storageTypeEnum, detail));
})
.stream()
.collect(Collectors.groupingBy(StorageApplyOrderDetailPO::getSnowCode, Collectors.summingInt(StorageApplyOrderDetailPO::getNum)));
```
这样代码更加简洁易懂,并且可以避免中间操作 `peek` 带来的副作用。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)