自学内容网 自学内容网

通过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,如果不需要额外的副本
} 
  1. 获取发票产品列表
    • 通过调用 invoiceProductService.getInvoiceProductList(exportReqVO) 方法获取一个 InvoiceProductDO 类型的列表 list。这个列表包含了根据某种请求(exportReqVO)获取的发票产品信息。
  2. 检查是否有经过修改后的产品
    • 使用 Java 8 的 Stream API,通过 anyMatch 方法检查列表中是否存在至少一个 IsRevamp 属性为 1 的产品。如果存在,hasRevampedProducts 变量将被设置为 true;否则,设置为 false
  3. 根据检查结果筛选列表
    • 如果 hasRevampedProducts 为 true,即列表中存在至少一个经过修改后的产品,那么使用 Stream API 的 filter 方法筛选出所有 IsRevamp 属性为 1 的产品,并将结果收集到一个新的列表 finalList 中。
    • 如果 hasRevampedProducts 为 false,即列表中不存在经过修改后的产品,那么将原始列表 list 的一个副本赋值给 finalList。这里使用 new ArrayList<>(list) 创建了 list 的一个浅拷贝,但注释指出如果不需要额外的副本,也可以直接使用 list
  4. 结果
    • 最终,finalList 将包含所有经过修改后的产品(如果存在的话),或者包含原始列表中的所有产品(如果不存在经过改造的产品)。

anyMatch的常用场景包括:

  1. 检查是否存在符合条件的元素:当你想要快速检查一个集合中是否存在至少一个满足特定条件的元素时,可以使用anyMatch

  2. 提前终止操作:由于anyMatch在找到第一个满足条件的元素后立即返回true,因此它可以作为一种优化手段,用于在不需要处理整个集合时提前终止操作。


原文地址:https://blog.csdn.net/weixin_60170500/article/details/142764796

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!