如何基于Java中的文件管理器标准过滤对象列表? [英] How to filter a list of objects based on filer criteria in java?
本文介绍了如何基于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屋!
查看全文