JAVA08_Stream流anyMatch和allMatch和noneMatch的区别

①. allMatch全匹配

  • ①. 判断数据列表中全部元素都符合设置的predicate条件,如果是就返回true,否则返回false,流为空时总是返回true

  • ②. 接口定义:boolean allMatch(Predicate<? super T> predicate)

  • ③. 方法描述:在allMatch接口定义中是接收Predicate 类型参数,在Lamdba表达式中Predicate 是接收一个T类型参数,然后经过逻辑验证返回[布尔值]结果。这里allMatch表示,判断的条件里,全部元素符合条件,就返回true值

    List<JSONObject> o0o0= new ArrayList<>();
    JSONObject o0= new JSONObject();
    o0.put("itemunit", 0);
    o0.put("mat_no", "mat_no");
    o0.put("warehouseid", "warehouseid");
    o0.put("position_no", "position_no");
    o0.put("batch", "batch");
    o0o0.add(o0);
    JSONObject o0o = new JSONObject();
    o0o.put("itemunit", 0);
    o0o.put("mat_no", "mat_no");
    o0o.put("warehouseid", "warehouseid");
    o0o.put("position_no", "position_no");
    o0o.put("batch", "batch");
    o0o0.add(o0o );
    boolean b =o0o0.stream().allMatch(doc-> doc.getIntValue("itemunit")==0);
    System.out.println(b);
    // 结果: true
    /**
     * 根据状态获取状态值
     * 子单状态一致,返回对应的枚举code
     * 子单状态不一致,则返回状态"7" 部分发货
     *
     * @param orderStatuses 状态列表
     * @return 状态code
     */
    public static String getStatusByStatusList(List<String> orderStatuses) {
    
    
        for (TkOrderStatusEnum value : TkOrderStatusEnum.values()) {
    
    
            if (orderStatuses.stream().allMatch(status -> status.equals(value.getStatus()))) {
    
    
                return value.getCode();
            }
        }
        return PARTIAL_DELIVERY.getCode();
    }

②. anyMatch部分匹配

  • ①. 判断数据列表中是否存在任意一个元素符合设置的predicate条件,如果是就返回true,否则返回false

  • ②. 接口定义:[boolean] anyMatch(Predicate<? super T> predicate)

  • ③. 方法描述:在anyMatch 接口定义中是接收 Predicate 类型参数,在Lamdba表达式中 Predicate 是接收一个T类型参数,然后经过逻辑验证返回布尔值结果。这里anyMatch表示,判断的条件里,任意一个元素符合条件,就返回true值

  • ④. 案例展示:

 List<JSONObject> o0o0= new ArrayList<>();
    JSONObject o0= new JSONObject();
    o0.put("itemunit", 0);
    o0.put("mat_no", "mat_no");
    o0.put("warehouseid", "warehouseid");
    o0.put("position_no", "position_no");
    o0.put("batch", "batch");
    o0o0.add(o0);
    JSONObject o0o = new JSONObject();
    o0o.put("itemunit", 0);
    o0o.put("mat_no", "mat_no");
    o0o.put("warehouseid", "warehouseid");
    o0o.put("position_no", "position_no");
    o0o.put("batch", "batch");
    o0o0.add(o0o );
    boolean b=o0o0.stream().anyMatch(doc-> doc.getIntValue("itemunit")!=0);
    System.out.println(b);
    //结果: false
	// 导出错误文件
	if (activityExcelModels.stream().anyMatch(excelModel -> StringUtils.isNotEmpty(excelModel.getErrorMsg()))) {
    
    
		// 如果有一个错误,就需要将Excel导出
		uploadDiscountExportTask(id, activityExcelModels);
		return;
	}

③. noneMatch不匹配

  • ①. 判断数据列表中全部元素都不符合设置的predicate条件,如果是就返回true,否则返回false,流为空时总是返回true

  • ②. 接口定义:boolean noneMatch(Predicate<? super T> predicate)

  • ③. 方法描述:在noneMatch接口定义中是接收 Predicate 类型参数,在Lamdba表达式中Predicate 是接收一个T类型参数,然后经过逻辑验证返回布尔值结果。这里noneMatch表示与allMatch相反,判断的条件里的元素,所有的元素都不符合,就返回true值

  • ④. 示例

   List<JSONObject> o0o0= new ArrayList<>();
    JSONObject o0= new JSONObject();
    o0.put("itemunit", 0);
    o0.put("mat_no", "mat_no");
    o0.put("warehouseid", "warehouseid");
    o0.put("position_no", "position_no");
    o0.put("batch", "batch");
    o0o0.add(o0);
    JSONObject o0o = new JSONObject();
    o0o.put("itemunit", 0);
    o0o.put("mat_no", "mat_no");
    o0o.put("warehouseid", "warehouseid");
    o0o.put("position_no", "position_no");
    o0o.put("batch", "batch");
    o0o0.add(o0o );
    boolean b=o0o0.stream().noneMatch(doc-> doc.getIntValue("itemunit")==0);
    System.out.println(b);
    // 结果:false

猜你喜欢

转载自blog.csdn.net/TZ845195485/article/details/131391519