org.apache.commons.collections : 集合对象查询
http://www.java2s.com/Code/Java/Apache-Common/PredicateChainChainingoftwoormorepredicates.htm
Bean元素对象:
Bean元素对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
Java代码 package com.pandy.search4mList; import org.apache.commons.lang.builder.ToStringBuilder; /** * Copyright 2009 @ jPractices v 1.0 * @SVN URL : http://jpractices.googlecode.com * @author Ganesh Gowtham * @Homepage : http://ganesh.gowtham.googlepages.com */ public class Person { private String firstName; private String lastName; private int salary; public Person(String firstName, String lastName, int salary) { super(); this.firstName = firstName; this.lastName = lastName; this.salary = salary; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } } |
查询:存在一个List<Person>的列表,查询这个列表的元素,这个元素的firstName=”ganesh”和lastName=”gowtham”的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
Java代码 package com.pandy.search4mList; import org.apache.commons.beanutils.BeanPredicate; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import org.apache.commons.collections.PredicateUtils; import org.apache.commons.collections.functors.EqualPredicate; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * Copyright 2009 @ jPractices v 1.0 * * @author Ganesh Gowtham * @SVN URL : http://jpractices.googlecode.com * @Homepage : http://ganesh.gowtham.googlepages.com */ public class BeanPredicateChainExample { List<Person> personList = new ArrayList<Person>(); /** * Basic method which creates the list of person object's */ void setUpData() { personList.add(new Person("ganesh", "gowtham", 35000)); personList.add(new Person("britney", "spears", 45000)); personList.add(new Person("ganesh", "gowtham", 36000)); personList.add(new Person("ganesh", "dummy", 45000)); } /** * Here we are adding multiple predicate * filters the collection so that final person object will contain * firstName as "ganesh" & lastName as "gowtham" */ void filterDataUsingMultipleCriteria() { EqualPredicate firstNameEqlPredicate = new EqualPredicate("ganesh"); BeanPredicate firtsNameBeanPredicate = new BeanPredicate("firstName", firstNameEqlPredicate); EqualPredicate lastNameEqlPredicate2 = new EqualPredicate("gowtham"); BeanPredicate lastNameBeanPredicate2 = new BeanPredicate("lastName", lastNameEqlPredicate2); Predicate[] allPredicateArray = {firtsNameBeanPredicate, lastNameBeanPredicate2}; Predicate allPredicate = PredicateUtils.allPredicate(allPredicateArray); Collection<Person> filteredCollection = CollectionUtils.select(personList, allPredicate); for (Person person : filteredCollection) { System.out.println(person); } } public static void main(String[] args) { BeanPredicateChainExample chainExample = new BeanPredicateChainExample(); chainExample.setUpData(); chainExample.filterDataUsingMultipleCriteria(); } } |
Map元素对象查询:存在一个List<Map>的列表,查询这个列表的元素,这个元素的firstName=”ganesh”和lastName=”gowtham”的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
Java代码 package com.pandy.search4mList; import org.apache.commons.beanutils.BeanPredicate; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import org.apache.commons.collections.PredicateUtils; import org.apache.commons.collections.functors.EqualPredicate; import java.util.*; /** * Copyright 2009 @ jPractices v 1.0 * * @author Ganesh Gowtham * @SVN URL : http://jpractices.googlecode.com * @Homepage : http://ganesh.gowtham.googlepages.com */ public class MapPredicateChainExample { List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); /** * Basic method which creates the list of person object's */ void setUpData() { Map<String,Object> map = new HashMap<String,Object>(); map.put("firstName","ganesh"); map.put("lastName","gowtham"); map.put("salary",35000); list.add(map); map = new HashMap<String,Object>(); map.put("firstName","britney"); map.put("lastName","spears"); map.put("salary",45000); list.add(map); map = new HashMap<String,Object>(); map.put("firstName","ganesh"); map.put("lastName","gowtham"); map.put("salary",36000); list.add(map); map = new HashMap<String,Object>(); map.put("firstName","ganesh"); map.put("lastName","dummy"); map.put("salary",45000); list.add(map); } /** * Here we are adding multiple predicate * filters the collection so that final person object will contain * firstName as "ganesh" & lastName as "gowtham" */ void filterDataUsingMultipleCriteria() { EqualPredicate firstNameEqlPredicate = new EqualPredicate("ganesh"); BeanPredicate firtsNameBeanPredicate = new BeanPredicate("firstName", firstNameEqlPredicate); EqualPredicate lastNameEqlPredicate2 = new EqualPredicate("gowtham"); BeanPredicate lastNameBeanPredicate2 = new BeanPredicate("lastName", lastNameEqlPredicate2); Predicate[] allPredicateArray = {firtsNameBeanPredicate, lastNameBeanPredicate2}; Predicate allPredicate = PredicateUtils.allPredicate(allPredicateArray); Collection<Map<String,Object>> filteredCollection = CollectionUtils.select(list, allPredicate); for (Map<String,Object> person : filteredCollection) { System.out.println(person); } } public static void main(String[] args) { MapPredicateChainExample chainExample = new MapPredicateChainExample(); chainExample.setUpData(); chainExample.filterDataUsingMultipleCriteria(); } } |