stream流中的filter优雅写法

1.定义工厂类

  1. 内部集成静态方法,返回Predicate 的接口
  2. 如果是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());
posted @   SpecialSpeculator  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示