如何基于Java中的文件管理器标准过滤对象列表? [英] How to filter a list of objects based on filer criteria in java?

查看:62
本文介绍了如何基于Java中的文件管理器标准过滤对象列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在mongodb中使用critera根据某些正则表达式来过滤firstName,LastName和dateOfBirth.

I'm trying to filter the firstName,LastName and dateOfBirth according based on some regex expression using critera in mongodb.

Query query = new Query();
        
        if(StringUtils.isNotBlank(firstName)) {
            query.addCriteria(Criteria.where(ConstantsFIRST_NAME).
                    regex(".*" + firstName + ".*",  "i"));
        }
        if(StringUtils.isNotBlank(lastName)) {
            query.addCriteria(Criteria.where(Constants.LAST_NAME).
                    regex(".*" + lastName + ".*", "i"));
        }
        if(StringUtils.isNotBlank(dateOfBirth)) {
            query.addCriteria(Criteria.where(Constants.DATE_OF_BIRTH).
                    regex(".*" + dateOfBirth + ".*",  "i");
        }

        return mongoTemplate.find(query)

当尝试遍历对象列表时,如何使用流和过滤器在java8中复制相同内容?

How to replicate the same in java8 using streams and filters when trying to iterate over a list of objects ?

List<Person> persons = new ArrayList<>();
        persons.add(new Person("first1", "last1","dob1"));
        persons.add(new Person(null, "last2","dob2"));
        persons.add(new Person("first1", null, null));
        persons.add(new Person("first2", "last2", "dob2"));
        persons.add(new Person("first3", "last3", "dob3"));
        persons.add(new Person(null, null), null);
        persons.add(null);

推荐答案

您可以具有如下谓词组合:

You can have predicate combination like below:

public static Predicate<Person> getPersonPredicate(Person testPerson){
        List<Predicate<Person>> predicates = new ArrayList<>();
        predicates.add(Objects::nonNull);
        predicates.add(p -> Objects.equals(p.getFirstName(), testPerson.getFirstName()));
        predicates.add(p -> Objects.equals(p.getLastName(), testPerson.getLastName()));
        //create single predicate with and conditions
        return predicates.stream().reduce(p -> true, (personPredicate, other) -> personPredicate.and(other));
    }

这篇关于如何基于Java中的文件管理器标准过滤对象列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆