通过java8的Stream API 筛选数据
List<InvoiceProductDO> list = invoiceProductService.getInvoiceProductList(exportReqVO);
boolean hasRevampedProducts = list.stream().anyMatch(product -> product.getIsRevamp() == 1);
List<InvoiceProductDO> finalList;
if (hasRevampedProducts) {
finalList = list.stream()
.filter(product -> product.getIsRevamp() == 1)
.collect(Collectors.toList());
} else {
finalList = new ArrayList<>(list); // 或者直接使用list,如果不需要额外的副本
}
- 获取发票产品列表:
- 通过调用
invoiceProductService.getInvoiceProductList(exportReqVO)
方法获取一个InvoiceProductDO
类型的列表list
。这个列表包含了根据某种请求(exportReqVO
)获取的发票产品信息。
- 通过调用
- 检查是否有经过修改后的产品:
- 使用 Java 8 的 Stream API,通过
anyMatch
方法检查列表中是否存在至少一个IsRevamp
属性为 1 的产品。如果存在,hasRevampedProducts
变量将被设置为true
;否则,设置为false
。
- 使用 Java 8 的 Stream API,通过
- 根据检查结果筛选列表:
- 如果
hasRevampedProducts
为true
,即列表中存在至少一个经过修改后的产品,那么使用 Stream API 的filter
方法筛选出所有IsRevamp
属性为 1 的产品,并将结果收集到一个新的列表finalList
中。 - 如果
hasRevampedProducts
为false
,即列表中不存在经过修改后的产品,那么将原始列表list
的一个副本赋值给finalList
。这里使用new ArrayList<>(list)
创建了list
的一个浅拷贝,但注释指出如果不需要额外的副本,也可以直接使用list
。
- 如果
- 结果:
- 最终,
finalList
将包含所有经过修改后的产品(如果存在的话),或者包含原始列表中的所有产品(如果不存在经过改造的产品)。
- 最终,
anyMatch
的常用场景包括:
-
检查是否存在符合条件的元素:当你想要快速检查一个集合中是否存在至少一个满足特定条件的元素时,可以使用
anyMatch
。 -
提前终止操作:由于
anyMatch
在找到第一个满足条件的元素后立即返回true
,因此它可以作为一种优化手段,用于在不需要处理整个集合时提前终止操作。
原文地址:https://blog.csdn.net/weixin_60170500/article/details/142764796
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!