AtomicInteger.stream()
时间: 2023-12-08 22:38:52 浏览: 25
很抱歉,没有找到AtomicInteger.stream()这个方法。AtomicInteger是一个原子类,主要用于实现多线程中的原子操作,例如自增、自减等。而Stream是Java 8中引入的新特性,用于对集合进行操作,例如过滤、映射、排序等。它们是两个不同的概念,没有直接的联系。如果您有其他问题,请继续提问。
相关问题
优化这段代码 //入库类型时返回结果 List<InOutProductVO> inList = null; //查询主表 inList = inOutStockMapper.queryInStockList(vo); //通过循环去查询详情并将对应的详细放入list( 根据条件查询详情) inList.stream().forEach(p->{ //这里加上单号查询 vo.setOtherNo(p.getOrderNo()); List<InOutProductDetailPO> list = inOutStockMapper.queryInStockListInfo(vo); p.setProductList(list); //因为查询需要总数这里需要累加总数 AtomicInteger total = new AtomicInteger(); list.stream().forEach(po->{ total.addAndGet(po.getProductNum()); }); p.setTotal(total.intValue()); //前端需要出入库类型这里手动添加 p.setInOutType(1); }); return new PageInfo<>(inList);
可以优化的地方有:
1. 使用Lambda表达式代替foreach循环
2. 避免重复查询,可以使用一个Map来缓存订单号对应的详情列表
3. 代码可读性可以更好,可以把一些常量抽象成字段或常量
下面是优化后的代码:
```
// 入库类型时返回结果
List<InOutProductVO> inList = new ArrayList<>();
// 查询主表
inList = inOutStockMapper.queryInStockList(vo);
// 用于缓存订单号对应的详情列表
Map<String, List<InOutProductDetailPO>> detailMap = new HashMap<>();
// 通过循环去查询详情并将对应的详细放入list( 根据条件查询详情)
inList.forEach(p -> {
// 这里加上单号查询
String orderNo = p.getOrderNo();
vo.setOtherNo(orderNo);
// 先从缓存里查找详情,如果没有再查询数据库
List<InOutProductDetailPO> list = detailMap.get(orderNo);
if (list == null) {
list = inOutStockMapper.queryInStockListInfo(vo);
detailMap.put(orderNo, list);
}
p.setProductList(list);
// 因为查询需要总数这里需要累加总数
AtomicInteger total = new AtomicInteger(0);
list.forEach(po -> {
total.addAndGet(po.getProductNum());
});
p.setTotal(total.intValue());
// 前端需要出入库类型这里手动添加
p.setInOutType(IN_STOCK_TYPE);
});
return new PageInfo<>(inList);
```
请帮我解释下面这段代码 AtomicInteger count = new AtomicInteger(); erpHouseList.parallelStream().forEach(erp -> { erp.setCreateTimeJrzf(now); ruFangDao.insert(erp); cleanErpDetailImgData(getByIdsss(erp.getId())); cleanBegin(erp); System.out.println(count.getAndIncrement()); });
这段代码使用了Java 8的流式处理(Stream API)和并行处理(parallelStream)。它首先创建了一个AtomicInteger类型的计数器count,然后对erpHouseList并行进行流处理。
在每个erp对象上,它首先设置其创建时间为当前时间(now),然后将其插入到数据库中(通过ruFangDao对象的insert方法),并清除其相关的详细图片数据(通过调用cleanErpDetailImgData方法)。接着,它调用cleanBegin方法对erp对象进行清理,最后使用AtomicInteger的getAndIncrement方法对计数器count进行自增,并将结果打印到控制台中。
总体来说,这段代码的作用是对erpHouseList中的每个erp对象进行一系列处理,并记录处理的数量。其中使用了并行流处理,可以提高处理效率。同时,使用AtomicInteger类型的计数器可以保证并发情况下的计数准确性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)