Java - Stream Filter 多条件筛选过滤

2024-02-26 1912阅读

温馨提示:这篇文章已超过407天没有更新,请注意相关的内容是否还可用!

Java Stream流中Filter用于通过设置的条件过滤出元素 ,示例如下:

List strings = Arrays.asList(“abc”, “”, “bc”, “efg”, “abcd”,"", “jkl”);
List filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

如果需要进行多条件过滤

我们可以对这些参数进行处理,我们只是需要做一下判断,即:

让所有参数默认为 false,然后对传进来的值进行取值判断,若满足该条件为true,多个条件进行多次判断

判断完成之后 会拿到所有的boolean值 通过 && 拼接返回,即 有一个为false,即返回值为false

通过该方法会对一个对象进行多条件过滤

public static List checkOperationv1(List list, BidProgressEnum progressEnum){
        Integer progress = Integer.valueOf(progressEnum.getCode());
        String nodeId = progressEnum.getNode();
        List collect = list.stream().filter(bidListVo -> filterProgress(bidListVo,progress)  )
                .collect(Collectors.toList());
     
        return collect;
    }
    private static boolean filterProgress(BidListVo bidListVo, Integer progress) {
        //副流程未开始 只判断主流程
        if(StringUtils.isEmpty(bidListVo.getReviewProgress())){
            return Integer.valueOf(bidListVo.getProgress()) >= progress ? true: false;
        }else if(Integer.valueOf(bidListVo.getProgress()) >= progress ||
                Integer.valueOf(bidListVo.getReviewProgress()) >= progress){
            // 主流程 独立流程 任意一个大于当前筛选进度就好
            return true;
        }
        return false;
    }

示例 

public class MultiFilterTest {
    public static void main(String[] args) {
        List userList = getUserList();
        // 筛选 age > 18 && address = "上海" 的user
        List filterList = userList.stream().filter(user -> filterAgeAndAddress(user,18,"上海")).collect(Collectors.toList());
        filterList.forEach(System.out::println);
    }
    // 筛选 age > 18 && address = "上海" 的user
    private static boolean filterAgeAndAddress(User user,Integer age,String address){
        if(user.getAge() > 18 && address.equals(user.getAddress())){
            return true;
        }
        return false;
    }
    private static List getUserList() {
        List userList = new ArrayList();
        userList.add(new User(1,"张三",18,"上海"));
        userList.add(new User(2,"王五",16,"上海"));
        userList.add(new User(3,"李四",20,"上海"));
        userList.add(new User(4,"张雷",22,"北京"));
        userList.add(new User(5,"张超",15,"深圳"));
        userList.add(new User(6,"李雷",24,"北京"));
        userList.add(new User(7,"王爷",21,"上海"));
        userList.add(new User(8,"张三丰",18,"广州"));
        userList.add(new User(9,"赵六",16,"广州"));
        userList.add(new User(10,"赵无极",26,"深圳"));
        return userList;
    }
}

输出如下:

Java - Stream Filter 多条件筛选过滤

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]