[英]Filtering properties from yaml file
我有这个映射到类 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
我需要对国家M1
usersegment
为5
所有 api 进行罚款。 所以对于上面的输入,我应该得到r1
和r2
都具有完整的配置细节。 对于用户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 的列表: M1
和用户usersegment
5
您能否尝试以下代码段:
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());
(请注意,我已经创建了自定义对象来模拟问题。)
最好使用Stream::anyMatch
作为过滤器方法中Predicate
的返回值。 这种短路方法的优点是,一旦发现第一个元素符合条件并返回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")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.