org.apache.commons.collections : 集合对象查询

http://www.java2s.com/Code/Java/Apache-Common/PredicateChainChainingoftwoormorepredicates.htm
Bean元素对象:
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"的元素
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"的元素
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();
    }
}

你可能感兴趣的:(Collections)