stream流中的filter优雅写法
1.定义工厂类
- 内部集成静态方法,返回Predicate
的接口 - 如果是stream流中遍历的对象,不需要定义到方法的参数签名那
static class ResourceDetailPredicates {
public static Predicate<ResourceDetail> wareNameFilter() {
return resourceDetail1 -> {
if (resourceDetail1.getAppCnName().contains("关闭")){
return false;
}
if (resourceDetail1.getAppCnName().contains("禁用")){
return false;
}
if (resourceDetail1.getAppCnName().contains("关仓")){
return false;
}
return true;
};
}
public static Predicate<ResourceDetail> platformFilter(ScanObjParam param) {
return resourceDetail1 -> {
if(CollectionUtils.isEmpty(param.getPlatforms())){
return true;
}else {
return param.getPlatforms().contains(resourceDetail1.getAppPlatform());
}
};
}
public static Predicate<ResourceDetail> envFilter(ScanObjParam param) {
return resourceDetail1 -> {
if(StringUtils.isBlank(param.getEnv())){
return true;
}else {
return param.getEnv().equalsIgnoreCase(resourceDetail1.getEnvType());
}
};
}
}
2.使用工厂类
List<ResourceDetail> resourceDetailList = resourceDetails.stream()
.filter(ResourceDetailPredicates.platformFilter(param))
.filter(ResourceDetailPredicates.envFilter(param))
.filter(ResourceDetailPredicates.wareNameFilter())
.collect(Collectors.toList());
原创:做时间的朋友
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示