1.Stream 是在 Java8 新增的特性,普遍称其为流;它不是数据结构也不存放任何数据,其主要用于集合的逻辑处理。
2.Stream流是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身并不存储任何元素(或其地址值),它只是在原数据集上定义了一组操作。
3.Stream流不保存数据,Stream操作是尽可能惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作。
4.Stream流不会改变原有数据,想要拿到改变后的数据,要用对象接收。
串行流stream:串行处理数据,不产生异步线程。
并行流parallelStream:parallelStream提供了流的并行处理,它是Stream的另一重要特性,其底层使用Fork/Join框架实现。简单理解就是多线程异步任务的一种实现。
建议:数据量不大的情况下建议使用stream即可,不要盲目大量使用parallelStream,因为parallelStream是多线程异步的,也就是说会产生多线程,消耗内存不说,说不定还会更慢,并非一定会更快更好。
下面说说常用的几种方法:
1.groupingBy方法:主要是转化数据为Map,value是符合条件的集合
// 添加的采购申请id集合
List requisitionList = new ArrayList();
Map> skuMap = requisitionParams.getSkuList().stream().collect(Collectors.groupingBy(PurchaseRequisitionSkuParams::getBrandName));
skuMap.forEach((brandName,skus)->{
// 生成采购申请编码
purchaseRequisition.setPurchaseRequisitionCode(purchaseCodeUtil.getNextPurchaseCode());
// 保存采购信息
requisitionMapper.savePurchaseRequisition(purchaseRequisition);
requisitionList.add(purchaseRequisition);
// 保存采购物料明细
requisitionMapper.saveSkuList(purchaseRequisition.getId(),skus);
});
2.toMap方法:主要是转化数据为Map,value是该条记录或字段值
// sku数量校验
Map skuNumMap = requisitionParams.getSkuList().stream().collect(
Collectors.toMap(PurchaseRequisitionSkuParams::getSkuId,PurchaseRequisitionSkuParams::getNum,(v1,v2) -> v1.add(v2)));
// 查出购买的数量
List numVOList =
customerOrderMapper.querySkuNum(requisitionParams.getCustomerOrderId(), skuNumMap.keySet());
numVOList.stream().forEach(numVO ->{
if (skuNumMap.get(numVO.getSkuId()).compareTo(numVO.getNum()) > 0){
throw new ValidateException(ApiResponseCode.ABNORMAL_DATA.getCode(), "采购的物料数量不能大于客户订单数量!");
}
});
3.filter方法:主要是用来筛选数据的
List adminList = adminMapper.selectList(null);
adminList = adminList.stream().filter(admin -> admin.getAdminState() != null).collect(Collectors.toList());
4.anyMatch方法:用于判断数据,只要有一个条件满足即返回true
List adminList = adminMapper.selectList(null);
boolean isAdmin = adminList.stream().anyMatch(admin -> admin.getAdminState() != null);
5.allMatch方法:用于判断数据,必须全部都满足才会返回true
List adminList = adminMapper.selectList(null);
boolean isAdmin = adminList.stream().allMatch(admin -> admin.getAdminState() != null);
6.noneMatch方法:用于判断数据,全都不满足才会返回true
List adminList = adminMapper.selectList(null);
boolean isAdmin = adminList.stream().noneMatch(admin -> admin.getAdminState() != null);
7.map方法:一般用于获取属性值
List adminList = adminMapper.selectList(null);
List adminIdList = adminList.stream().map(Admin::getId).collect(Collectors.toList());
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net