【问题标题】:Filtering properties from yaml file从 yaml 文件中过滤属性
【发布时间】:2020-01-09 20:03:14
【问题描述】:

我有这个映射到类 T1 的 yaml 文件。

T1:
  apis :
    - api: r1
      cnfig :
        - country: M1
          usersegment: 5|6|10
        - country: M2
          usersegment: 10|11
     - api: r2
      cnfig :
        - country: M1
          usersegment: 5|6|10|11
        - country: M2
          usersegment: 10|11

我需要对所有 usersegment5 的国家/地区 M1 的 api 进行罚款。所以对于上面的输入,我应该得到 r1r2 两者都有完整的配置细节。对于usersegment 11 和国家/地区M1 我应该只得到r2

我尝试在 java 中使用流做同样的事情:

masterConfig.getConfig("tv").getApis()
    .stream()
    .filter(api -> api.Configs().stream()
        .filter(singleConfig -> singleConfig.usersegment.contains("5") && 
            country.equals("M1"))
        .count() > 0)
    .count()

每次它显示相同的计数,即 2 。我需要获取具有国家/地区的所有 api 的列表:M1usersegment 5

【问题讨论】:

    标签: java spring java-8 java-stream swagger


    【解决方案1】:

    请您尝试以下 sn-p :

            List<Api> collect = apis
                    .stream().filter(
                            api -> (api.getConfigs().stream()
                                    .filter(singleConfig -> singleConfig.usersegment.contains("11")
                                            && singleConfig.country.equals("M1"))
                                    .count() > 0))
                    .collect(Collectors.toList());
    

    (请注意,我创建了自定义对象来模拟问题。)

    【讨论】:

      【解决方案2】:

      最好在过滤器方法中使用Stream::anyMatch 作为Predicate 的返回值。这种 short-circuiting 方法的优点是,一旦发现第一个元素符合条件并返回 true,流就会停止迭代元素。

      List<Api> apiList = apis
          .stream()
          .filter(api -> api.getConfigs().stream()
                  .anyMatch(
                      singleConfig -> singleConfig.usersegment.contains("11") && 
                      singleConfig.country.equals("M1")))
          .collect(Collectors.toList());
      

      此外,应使用singleConfig.country.equals("M1")

      【讨论】:

        猜你喜欢
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        • 2019-11-27
        • 2018-10-08
        • 2018-10-27
        • 1970-01-01
        • 2019-03-21
        • 2019-05-29
        相关资源
        最近更新 更多