简单的filter过滤实现类

/**
 * <pre>
 * Copyright kanpiaoxue.org [2000-2016]
 * </pre>
 */
package org.kanpiaoxue.test;

import org.apache.commons.lang3.StringUtils;

import com.google.common.base.Preconditions;
import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists;

import java.io.Serializable;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <pre>
 * FilterTest.java
 * @author kanpiaoxue<br>
 * @version 1.0
 * Create Time 2016年8月10日 下午4:39:42<br>
 * Description : 简单的filter过滤实现类
 * 设计思路:
 *      通过统一的过滤器接口提供各种过滤服务实现类。
 *      如果过滤过程中出现不满足条件的元素需要抛出指定的异常,没有抛出异常的原始就是通过过滤条件的元素。
 *      过滤的执行顺序取决于该过滤器在过滤器列表中的位置。
 *      不符合过滤条件的元素被抛弃的时候可以打印出“为什么不能通过过滤器的原因”,方便进行debug跟踪。
 * </pre>
 */
public class FilterTest {

    abstract class AbstractSchoolPerson implements Person {
        protected String name;
        protected int age;
        protected City city;
        protected Profession profession;

        /**
         * <pre>
         * @param name
         * @param age
         * @param city
         * @param profession
         * </pre>
         */
        public AbstractSchoolPerson(String name, int age, City city) {
            super();
            this.name = name;
            this.age = age;
            this.city = city;
        }

        /**
         * <pre>
         * @return the age
         * </pre>
         */
        @Override
        public int getAge() {
            return age;
        }

        /**
         * <pre>
         * @return the city
         * </pre>
         */
        @Override
        public City getCity() {
            return city;
        }

        /**
         * <pre>
         * @return the name
         * </pre>
         */
        @Override
        public String getName() {
            return name;
        }

        /*
         * (non-Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + ", city=" + city + ", profession="
                    + getProfession() + "]";
        }

    }

    class AgeFilter implements ConditionFilter {

        private int minAge;
        private int maxAge;

        /**
         * <pre>
         * @param minAge
         * @param maxAge
         * </pre>
         */
        public AgeFilter(int minAge, int maxAge) {
            super();
            this.minAge = minAge;
            this.maxAge = maxAge;
        }

        /*
         * (non-Javadoc)
         * @see
         * org.kanpiaoxue.test.FilterTest.Filter#filter(org.kanpiaoxue.test.
         * FilterTest.Person)
         */
        @Override
        public void filter(Person person) throws StopException {
            Preconditions.checkNotNull(person);
            int age = person.getAge();
            if (age < minAge || age > maxAge) {
                throw new StopException(new KeyValue<Integer, String>(ERROR_CODE,
                        String.format("%s's age is %s. It's out of the range[%s-%s]", person.getName(), age,
                                minAge, maxAge)));
            }
        }
    }

    enum City {
        BEIJING, TIANJIN, SHANGHAI, NANJING
    }

    class CityFilter implements ConditionFilter {
        private City city;

        /**
         * <pre>
         * @param city
         * </pre>
         */
        public CityFilter(City city) {
            super();
            this.city = city;
        }

        /*
         * (non-Javadoc)
         * @see
         * org.kanpiaoxue.test.FilterTest.Filter#filter(org.kanpiaoxue.test.
         * FilterTest.Person)
         */
        @Override
        public void filter(Person person) throws StopException {
            Preconditions.checkNotNull(person);
            City city = person.getCity();
            if (!this.city.equals(city)) {
                throw new StopException(new KeyValue<Integer, String>(ERROR_CODE, String.format(
                        "%s does not live in %s. He lives in %s", person.getName(), this.city, city)));
            }
        }
    }

    interface ConditionFilter {
        void filter(Person person) throws StopException;
    }

    class Key<K> implements Serializable {
        /**
         * <pre>
         * </pre>
         */

        private static final long serialVersionUID = 7532585206735018941L;
        protected K key;

        /**
         * <pre>
         * </pre>
         */
        public Key() {
            super();
        }

        /**
         * <pre>
         * @param key
         * </pre>
         */
        public Key(K key) {
            super();
            this.key = key;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            @SuppressWarnings("rawtypes")
            Key other = (Key) obj;
            if (key == null) {
                if (other.key != null) {
                    return false;
                }
            } else if (!key.equals(other.key)) {
                return false;
            }
            return true;
        }

        public K getKey() {
            return key;
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((key == null) ? 0 : key.hashCode());
            return result;
        }

        public void setKey(K key) {
            this.key = key;
        }

        @Override
        public String toString() {
            return "Key [key=" + key + "]";
        }
    }

    class KeyValue<K, V> extends Key<K> {
        /**
         * <pre>
         * </pre>
         */

        private static final long serialVersionUID = -5805488471492686888L;
        private V value;

        /**
         * <pre>
         * </pre>
         */
        public KeyValue() {
            super();
        }

        /**
         * <pre>
         * @param key
         * </pre>
         */
        public KeyValue(K key) {
            super(key);
        }

        /**
         * <pre>
         * @param key
         * @param value
         * </pre>
         */
        public KeyValue(K key, V value) {
            super();
            this.key = key;
            this.value = value;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            @SuppressWarnings("rawtypes")
            KeyValue other = (KeyValue) obj;
            if (key == null) {
                if (other.key != null) {
                    return false;
                }
            } else if (!key.equals(other.key)) {
                return false;
            }
            if (value == null) {
                if (other.value != null) {
                    return false;
                }
            } else if (!value.equals(other.value)) {
                return false;
            }
            return true;
        }

        @Override
        public K getKey() {
            return key;
        }

        public V getValue() {
            return value;
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((key == null) ? 0 : key.hashCode());
            result = prime * result + ((value == null) ? 0 : value.hashCode());
            return result;
        }

        @Override
        public void setKey(K key) {
            this.key = key;
        }

        public void setValue(V value) {
            this.value = value;
        }

        @Override
        public String toString() {
            return "KeyValue [key=" + key + ", value=" + value + "]";
        }

    }

    class NameFilter implements ConditionFilter {
        private final Pattern pattern;

        /**
         * <pre>
         * @param pattern
         * </pre>
         */
        public NameFilter(String regex) {
            super();
            Preconditions.checkArgument(StringUtils.isNotBlank(regex));
            this.pattern = Pattern.compile(regex);
        }

        /*
         * (non-Javadoc)
         * @see
         * org.kanpiaoxue.test.FilterTest.Filter#filter(org.kanpiaoxue.test.
         * FilterTest.Person)
         */
        @Override
        public void filter(Person person) throws StopException {
            Preconditions.checkNotNull(person);
            String name = person.getName();
            Matcher m = this.pattern.matcher(name);
            if (!m.find()) {
                throw new StopException(new KeyValue<Integer, String>(ERROR_CODE, String.format(
                        "name:%s does not match expression : %s", name, this.pattern)));
            }
        }
    }

    interface Person {
        int getAge();

        String getName();

        City getCity();

        Profession getProfession();
    }

    enum Profession {
        TEACHER, STUDENT, POLICE
    }

    class ProfessionFilter implements ConditionFilter {
        private Profession profession;

        /**
         * <pre>
         * @param profession
         * </pre>
         */
        public ProfessionFilter(Profession profession) {
            super();
            this.profession = profession;
        }

        /*
         * (non-Javadoc)
         * @see
         * org.kanpiaoxue.test.FilterTest.ConditionFilter#filter(org.kanpiaoxue
         * .test.FilterTest.Person)
         */
        @Override
        public void filter(Person person) throws StopException {
            Preconditions.checkNotNull(person);
            Profession profession = person.getProfession();
            if (!this.profession.equals(profession)) {
                throw new StopException(new KeyValue<Integer, String>(ERROR_CODE, String.format(
                        "%s is a %s, not is a %s", person.getName(), profession, this.profession)));
            }

        }

    }

    class StopException extends Exception {

        /**
         * <pre>
         * </pre>
         */

        private static final long serialVersionUID = -4469063439657658711L;

        private KeyValue<Integer, String> result;

        public StopException() {
            super();
        }

        public StopException(KeyValue<Integer, String> result) {
            super();
            this.result = result;
        }

        public StopException(String message) {
            super(message);
        }

        /**
         * <pre>
         * @return the result
         * </pre>
         */
        public KeyValue<Integer, String> getResult() {
            return result;
        }

    }

    class Student extends AbstractSchoolPerson {

        /**
         * <pre>
         * @param name
         * @param age
         * @param city
         * </pre>
         */
        public Student(String name, int age, City city) {
            super(name, age, city);
        }

        /*
         * (non-Javadoc)
         * @see org.kanpiaoxue.test.FilterTest.Person#getProfession()
         */
        @Override
        public Profession getProfession() {
            return Profession.STUDENT;
        }
    }

    class Teacher extends AbstractSchoolPerson {

        /**
         * <pre>
         * @param name
         * @param age
         * @param city
         * </pre>
         */
        public Teacher(String name, int age, City city) {
            super(name, age, city);
        }

        /*
         * (non-Javadoc)
         * @see org.kanpiaoxue.test.FilterTest.Person#getProfession()
         */
        @Override
        public Profession getProfession() {
            return Profession.TEACHER;
        }
    }

    private static final int ERROR_CODE = 0;

    /**
     * <pre>
     * @param args
     * </pre>
     */
    public static void main(String[] args) {
        FilterTest test = new FilterTest();

        // 形成测试数据
        int size = 200;
        List<Person> list = Lists.newLinkedList();
        for (int i = 0; i < size; i++) {
            Person p = null;
            boolean flag = i % 2 == 0;
            City city = flag ? City.BEIJING : City.SHANGHAI;
            if (flag) {
                p = test.new Teacher("teacher-" + i, i % 35 + 20, city);
            } else {
                p = test.new Student("student-" + i, i % 15 + 10, City.BEIJING);
            }
            list.add(p);
        }

        // 构建过滤器
        List<ConditionFilter> filters = Lists.newArrayList();
        filters.add(test.new AgeFilter(10, 20));
        filters.add(test.new CityFilter(City.BEIJING));
        filters.add(test.new NameFilter("t"));
        filters.add(test.new ProfessionFilter(Profession.TEACHER));

        // 执行过滤动作
        List<Person> leftList = Lists.newLinkedList();
        for (Person person : list) {
            try {
                Stopwatch w = Stopwatch.createStarted();
                for (ConditionFilter f : filters) {
                    f.filter(person);
                }
                System.out.println(String.format("a person passed thougth all filters consumes %s.", w));
                leftList.add(person);
            } catch (StopException e) {
                KeyValue<Integer, String> result = e.getResult();
                if (ERROR_CODE == result.getKey().intValue()) {
                    System.err.println(String.format("remove person : %s , because %s", person,
                            result.getValue()));
                }
            }
        }

        // 打印过滤结果
        System.out.println();
        System.out.println(String.format("There are %s person left though the filters.", leftList.size()));
        for (Person person : leftList) {
            System.out.println(String.format("left: %s", person));
        }

    }
}

输出:

写道
remove person : Person [name=student-1, age=11, city=BEIJING, profession=STUDENT] , because student-1 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-2, age=22, city=BEIJING, profession=TEACHER] , because teacher-2's age is 22. It's out of the range[10-20]
remove person : Person [name=student-3, age=13, city=BEIJING, profession=STUDENT] , because student-3 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-4, age=24, city=BEIJING, profession=TEACHER] , because teacher-4's age is 24. It's out of the range[10-20]
remove person : Person [name=student-5, age=15, city=BEIJING, profession=STUDENT] , because student-5 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-6, age=26, city=BEIJING, profession=TEACHER] , because teacher-6's age is 26. It's out of the range[10-20]
remove person : Person [name=student-7, age=17, city=BEIJING, profession=STUDENT] , because student-7 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-8, age=28, city=BEIJING, profession=TEACHER] , because teacher-8's age is 28. It's out of the range[10-20]
remove person : Person [name=student-9, age=19, city=BEIJING, profession=STUDENT] , because student-9 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-10, age=30, city=BEIJING, profession=TEACHER] , because teacher-10's age is 30. It's out of the range[10-20]
remove person : Person [name=student-11, age=21, city=BEIJING, profession=STUDENT] , because student-11's age is 21. It's out of the range[10-20]
remove person : Person [name=teacher-12, age=32, city=BEIJING, profession=TEACHER] , because teacher-12's age is 32. It's out of the range[10-20]
remove person : Person [name=student-13, age=23, city=BEIJING, profession=STUDENT] , because student-13's age is 23. It's out of the range[10-20]
remove person : Person [name=teacher-14, age=34, city=BEIJING, profession=TEACHER] , because teacher-14's age is 34. It's out of the range[10-20]
remove person : Person [name=student-15, age=10, city=BEIJING, profession=STUDENT] , because student-15 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-16, age=36, city=BEIJING, profession=TEACHER] , because teacher-16's age is 36. It's out of the range[10-20]
remove person : Person [name=student-17, age=12, city=BEIJING, profession=STUDENT] , because student-17 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-18, age=38, city=BEIJING, profession=TEACHER] , because teacher-18's age is 38. It's out of the range[10-20]
remove person : Person [name=student-19, age=14, city=BEIJING, profession=STUDENT] , because student-19 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-20, age=40, city=BEIJING, profession=TEACHER] , because teacher-20's age is 40. It's out of the range[10-20]
remove person : Person [name=student-21, age=16, city=BEIJING, profession=STUDENT] , because student-21 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-22, age=42, city=BEIJING, profession=TEACHER] , because teacher-22's age is 42. It's out of the range[10-20]
remove person : Person [name=student-23, age=18, city=BEIJING, profession=STUDENT] , because student-23 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-24, age=44, city=BEIJING, profession=TEACHER] , because teacher-24's age is 44. It's out of the range[10-20]
remove person : Person [name=student-25, age=20, city=BEIJING, profession=STUDENT] , because student-25 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-26, age=46, city=BEIJING, profession=TEACHER] , because teacher-26's age is 46. It's out of the range[10-20]
remove person : Person [name=student-27, age=22, city=BEIJING, profession=STUDENT] , because student-27's age is 22. It's out of the range[10-20]
remove person : Person [name=teacher-28, age=48, city=BEIJING, profession=TEACHER] , because teacher-28's age is 48. It's out of the range[10-20]
remove person : Person [name=student-29, age=24, city=BEIJING, profession=STUDENT] , because student-29's age is 24. It's out of the range[10-20]
remove person : Person [name=teacher-30, age=50, city=BEIJING, profession=TEACHER] , because teacher-30's age is 50. It's out of the range[10-20]
remove person : Person [name=student-31, age=11, city=BEIJING, profession=STUDENT] , because student-31 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-32, age=52, city=BEIJING, profession=TEACHER] , because teacher-32's age is 52. It's out of the range[10-20]
remove person : Person [name=student-33, age=13, city=BEIJING, profession=STUDENT] , because student-33 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-34, age=54, city=BEIJING, profession=TEACHER] , because teacher-34's age is 54. It's out of the range[10-20]
remove person : Person [name=student-35, age=15, city=BEIJING, profession=STUDENT] , because student-35 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-36, age=21, city=BEIJING, profession=TEACHER] , because teacher-36's age is 21. It's out of the range[10-20]
remove person : Person [name=student-37, age=17, city=BEIJING, profession=STUDENT] , because student-37 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-38, age=23, city=BEIJING, profession=TEACHER] , because teacher-38's age is 23. It's out of the range[10-20]
remove person : Person [name=student-39, age=19, city=BEIJING, profession=STUDENT] , because student-39 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-40, age=25, city=BEIJING, profession=TEACHER] , because teacher-40's age is 25. It's out of the range[10-20]
remove person : Person [name=student-41, age=21, city=BEIJING, profession=STUDENT] , because student-41's age is 21. It's out of the range[10-20]
remove person : Person [name=teacher-42, age=27, city=BEIJING, profession=TEACHER] , because teacher-42's age is 27. It's out of the range[10-20]
remove person : Person [name=student-43, age=23, city=BEIJING, profession=STUDENT] , because student-43's age is 23. It's out of the range[10-20]
remove person : Person [name=teacher-44, age=29, city=BEIJING, profession=TEACHER] , because teacher-44's age is 29. It's out of the range[10-20]
remove person : Person [name=student-45, age=10, city=BEIJING, profession=STUDENT] , because student-45 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-46, age=31, city=BEIJING, profession=TEACHER] , because teacher-46's age is 31. It's out of the range[10-20]
remove person : Person [name=student-47, age=12, city=BEIJING, profession=STUDENT] , because student-47 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-48, age=33, city=BEIJING, profession=TEACHER] , because teacher-48's age is 33. It's out of the range[10-20]
remove person : Person [name=student-49, age=14, city=BEIJING, profession=STUDENT] , because student-49 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-50, age=35, city=BEIJING, profession=TEACHER] , because teacher-50's age is 35. It's out of the range[10-20]
remove person : Person [name=student-51, age=16, city=BEIJING, profession=STUDENT] , because student-51 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-52, age=37, city=BEIJING, profession=TEACHER] , because teacher-52's age is 37. It's out of the range[10-20]
remove person : Person [name=student-53, age=18, city=BEIJING, profession=STUDENT] , because student-53 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-54, age=39, city=BEIJING, profession=TEACHER] , because teacher-54's age is 39. It's out of the range[10-20]
remove person : Person [name=student-55, age=20, city=BEIJING, profession=STUDENT] , because student-55 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-56, age=41, city=BEIJING, profession=TEACHER] , because teacher-56's age is 41. It's out of the range[10-20]
remove person : Person [name=student-57, age=22, city=BEIJING, profession=STUDENT] , because student-57's age is 22. It's out of the range[10-20]
remove person : Person [name=teacher-58, age=43, city=BEIJING, profession=TEACHER] , because teacher-58's age is 43. It's out of the range[10-20]
remove person : Person [name=student-59, age=24, city=BEIJING, profession=STUDENT] , because student-59's age is 24. It's out of the range[10-20]
remove person : Person [name=teacher-60, age=45, city=BEIJING, profession=TEACHER] , because teacher-60's age is 45. It's out of the range[10-20]
remove person : Person [name=student-61, age=11, city=BEIJING, profession=STUDENT] , because student-61 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-62, age=47, city=BEIJING, profession=TEACHER] , because teacher-62's age is 47. It's out of the range[10-20]
remove person : Person [name=student-63, age=13, city=BEIJING, profession=STUDENT] , because student-63 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-64, age=49, city=BEIJING, profession=TEACHER] , because teacher-64's age is 49. It's out of the range[10-20]
remove person : Person [name=student-65, age=15, city=BEIJING, profession=STUDENT] , because student-65 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-66, age=51, city=BEIJING, profession=TEACHER] , because teacher-66's age is 51. It's out of the range[10-20]
remove person : Person [name=student-67, age=17, city=BEIJING, profession=STUDENT] , because student-67 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-68, age=53, city=BEIJING, profession=TEACHER] , because teacher-68's age is 53. It's out of the range[10-20]
remove person : Person [name=student-69, age=19, city=BEIJING, profession=STUDENT] , because student-69 is a STUDENT, not is a TEACHER
remove person : Person [name=student-71, age=21, city=BEIJING, profession=STUDENT] , because student-71's age is 21. It's out of the range[10-20]
remove person : Person [name=teacher-72, age=22, city=BEIJING, profession=TEACHER] , because teacher-72's age is 22. It's out of the range[10-20]
remove person : Person [name=student-73, age=23, city=BEIJING, profession=STUDENT] , because student-73's age is 23. It's out of the range[10-20]
remove person : Person [name=teacher-74, age=24, city=BEIJING, profession=TEACHER] , because teacher-74's age is 24. It's out of the range[10-20]
remove person : Person [name=student-75, age=10, city=BEIJING, profession=STUDENT] , because student-75 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-76, age=26, city=BEIJING, profession=TEACHER] , because teacher-76's age is 26. It's out of the range[10-20]
remove person : Person [name=student-77, age=12, city=BEIJING, profession=STUDENT] , because student-77 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-78, age=28, city=BEIJING, profession=TEACHER] , because teacher-78's age is 28. It's out of the range[10-20]
remove person : Person [name=student-79, age=14, city=BEIJING, profession=STUDENT] , because student-79 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-80, age=30, city=BEIJING, profession=TEACHER] , because teacher-80's age is 30. It's out of the range[10-20]
remove person : Person [name=student-81, age=16, city=BEIJING, profession=STUDENT] , because student-81 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-82, age=32, city=BEIJING, profession=TEACHER] , because teacher-82's age is 32. It's out of the range[10-20]
remove person : Person [name=student-83, age=18, city=BEIJING, profession=STUDENT] , because student-83 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-84, age=34, city=BEIJING, profession=TEACHER] , because teacher-84's age is 34. It's out of the range[10-20]
remove person : Person [name=student-85, age=20, city=BEIJING, profession=STUDENT] , because student-85 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-86, age=36, city=BEIJING, profession=TEACHER] , because teacher-86's age is 36. It's out of the range[10-20]
remove person : Person [name=student-87, age=22, city=BEIJING, profession=STUDENT] , because student-87's age is 22. It's out of the range[10-20]
remove person : Person [name=teacher-88, age=38, city=BEIJING, profession=TEACHER] , because teacher-88's age is 38. It's out of the range[10-20]
remove person : Person [name=student-89, age=24, city=BEIJING, profession=STUDENT] , because student-89's age is 24. It's out of the range[10-20]
remove person : Person [name=teacher-90, age=40, city=BEIJING, profession=TEACHER] , because teacher-90's age is 40. It's out of the range[10-20]
remove person : Person [name=student-91, age=11, city=BEIJING, profession=STUDENT] , because student-91 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-92, age=42, city=BEIJING, profession=TEACHER] , because teacher-92's age is 42. It's out of the range[10-20]
remove person : Person [name=student-93, age=13, city=BEIJING, profession=STUDENT] , because student-93 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-94, age=44, city=BEIJING, profession=TEACHER] , because teacher-94's age is 44. It's out of the range[10-20]
remove person : Person [name=student-95, age=15, city=BEIJING, profession=STUDENT] , because student-95 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-96, age=46, city=BEIJING, profession=TEACHER] , because teacher-96's age is 46. It's out of the range[10-20]
remove person : Person [name=student-97, age=17, city=BEIJING, profession=STUDENT] , because student-97 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-98, age=48, city=BEIJING, profession=TEACHER] , because teacher-98's age is 48. It's out of the range[10-20]
a person passed thougth all filters consumes 73.34 ms.
a person passed thougth all filters consumes 193.6 μs.
remove person : Person [name=student-99, age=19, city=BEIJING, profession=STUDENT] , because student-99 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-100, age=50, city=BEIJING, profession=TEACHER] , because teacher-100's age is 50. It's out of the range[10-20]
remove person : Person [name=student-101, age=21, city=BEIJING, profession=STUDENT] , because student-101's age is 21. It's out of the range[10-20]
remove person : Person [name=teacher-102, age=52, city=BEIJING, profession=TEACHER] , because teacher-102's age is 52. It's out of the range[10-20]
remove person : Person [name=student-103, age=23, city=BEIJING, profession=STUDENT] , because student-103's age is 23. It's out of the range[10-20]
remove person : Person [name=teacher-104, age=54, city=BEIJING, profession=TEACHER] , because teacher-104's age is 54. It's out of the range[10-20]
remove person : Person [name=student-105, age=10, city=BEIJING, profession=STUDENT] , because student-105 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-106, age=21, city=BEIJING, profession=TEACHER] , because teacher-106's age is 21. It's out of the range[10-20]
remove person : Person [name=student-107, age=12, city=BEIJING, profession=STUDENT] , because student-107 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-108, age=23, city=BEIJING, profession=TEACHER] , because teacher-108's age is 23. It's out of the range[10-20]
remove person : Person [name=student-109, age=14, city=BEIJING, profession=STUDENT] , because student-109 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-110, age=25, city=BEIJING, profession=TEACHER] , because teacher-110's age is 25. It's out of the range[10-20]
remove person : Person [name=student-111, age=16, city=BEIJING, profession=STUDENT] , because student-111 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-112, age=27, city=BEIJING, profession=TEACHER] , because teacher-112's age is 27. It's out of the range[10-20]
remove person : Person [name=student-113, age=18, city=BEIJING, profession=STUDENT] , because student-113 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-114, age=29, city=BEIJING, profession=TEACHER] , because teacher-114's age is 29. It's out of the range[10-20]
remove person : Person [name=student-115, age=20, city=BEIJING, profession=STUDENT] , because student-115 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-116, age=31, city=BEIJING, profession=TEACHER] , because teacher-116's age is 31. It's out of the range[10-20]
remove person : Person [name=student-117, age=22, city=BEIJING, profession=STUDENT] , because student-117's age is 22. It's out of the range[10-20]
remove person : Person [name=teacher-118, age=33, city=BEIJING, profession=TEACHER] , because teacher-118's age is 33. It's out of the range[10-20]
remove person : Person [name=student-119, age=24, city=BEIJING, profession=STUDENT] , because student-119's age is 24. It's out of the range[10-20]
remove person : Person [name=teacher-120, age=35, city=BEIJING, profession=TEACHER] , because teacher-120's age is 35. It's out of the range[10-20]
remove person : Person [name=student-121, age=11, city=BEIJING, profession=STUDENT] , because student-121 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-122, age=37, city=BEIJING, profession=TEACHER] , because teacher-122's age is 37. It's out of the range[10-20]
remove person : Person [name=student-123, age=13, city=BEIJING, profession=STUDENT] , because student-123 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-124, age=39, city=BEIJING, profession=TEACHER] , because teacher-124's age is 39. It's out of the range[10-20]
remove person : Person [name=student-125, age=15, city=BEIJING, profession=STUDENT] , because student-125 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-126, age=41, city=BEIJING, profession=TEACHER] , because teacher-126's age is 41. It's out of the range[10-20]
remove person : Person [name=student-127, age=17, city=BEIJING, profession=STUDENT] , because student-127 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-128, age=43, city=BEIJING, profession=TEACHER] , because teacher-128's age is 43. It's out of the range[10-20]
remove person : Person [name=student-129, age=19, city=BEIJING, profession=STUDENT] , because student-129 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-130, age=45, city=BEIJING, profession=TEACHER] , because teacher-130's age is 45. It's out of the range[10-20]
remove person : Person [name=student-131, age=21, city=BEIJING, profession=STUDENT] , because student-131's age is 21. It's out of the range[10-20]
remove person : Person [name=teacher-132, age=47, city=BEIJING, profession=TEACHER] , because teacher-132's age is 47. It's out of the range[10-20]
remove person : Person [name=student-133, age=23, city=BEIJING, profession=STUDENT] , because student-133's age is 23. It's out of the range[10-20]
remove person : Person [name=teacher-134, age=49, city=BEIJING, profession=TEACHER] , because teacher-134's age is 49. It's out of the range[10-20]
remove person : Person [name=student-135, age=10, city=BEIJING, profession=STUDENT] , because student-135 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-136, age=51, city=BEIJING, profession=TEACHER] , because teacher-136's age is 51. It's out of the range[10-20]
remove person : Person [name=student-137, age=12, city=BEIJING, profession=STUDENT] , because student-137 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-138, age=53, city=BEIJING, profession=TEACHER] , because teacher-138's age is 53. It's out of the range[10-20]
remove person : Person [name=student-139, age=14, city=BEIJING, profession=STUDENT] , because student-139 is a STUDENT, not is a TEACHER
remove person : Person [name=student-141, age=16, city=BEIJING, profession=STUDENT] , because student-141 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-142, age=22, city=BEIJING, profession=TEACHER] , because teacher-142's age is 22. It's out of the range[10-20]
remove person : Person [name=student-143, age=18, city=BEIJING, profession=STUDENT] , because student-143 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-144, age=24, city=BEIJING, profession=TEACHER] , because teacher-144's age is 24. It's out of the range[10-20]
remove person : Person [name=student-145, age=20, city=BEIJING, profession=STUDENT] , because student-145 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-146, age=26, city=BEIJING, profession=TEACHER] , because teacher-146's age is 26. It's out of the range[10-20]
remove person : Person [name=student-147, age=22, city=BEIJING, profession=STUDENT] , because student-147's age is 22. It's out of the range[10-20]
remove person : Person [name=teacher-148, age=28, city=BEIJING, profession=TEACHER] , because teacher-148's age is 28. It's out of the range[10-20]
remove person : Person [name=student-149, age=24, city=BEIJING, profession=STUDENT] , because student-149's age is 24. It's out of the range[10-20]
remove person : Person [name=teacher-150, age=30, city=BEIJING, profession=TEACHER] , because teacher-150's age is 30. It's out of the range[10-20]
remove person : Person [name=student-151, age=11, city=BEIJING, profession=STUDENT] , because student-151 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-152, age=32, city=BEIJING, profession=TEACHER] , because teacher-152's age is 32. It's out of the range[10-20]
remove person : Person [name=student-153, age=13, city=BEIJING, profession=STUDENT] , because student-153 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-154, age=34, city=BEIJING, profession=TEACHER] , because teacher-154's age is 34. It's out of the range[10-20]
remove person : Person [name=student-155, age=15, city=BEIJING, profession=STUDENT] , because student-155 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-156, age=36, city=BEIJING, profession=TEACHER] , because teacher-156's age is 36. It's out of the range[10-20]
remove person : Person [name=student-157, age=17, city=BEIJING, profession=STUDENT] , because student-157 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-158, age=38, city=BEIJING, profession=TEACHER] , because teacher-158's age is 38. It's out of the range[10-20]
remove person : Person [name=student-159, age=19, city=BEIJING, profession=STUDENT] , because student-159 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-160, age=40, city=BEIJING, profession=TEACHER] , because teacher-160's age is 40. It's out of the range[10-20]
remove person : Person [name=student-161, age=21, city=BEIJING, profession=STUDENT] , because student-161's age is 21. It's out of the range[10-20]
remove person : Person [name=teacher-162, age=42, city=BEIJING, profession=TEACHER] , because teacher-162's age is 42. It's out of the range[10-20]
remove person : Person [name=student-163, age=23, city=BEIJING, profession=STUDENT] , because student-163's age is 23. It's out of the range[10-20]
remove person : Person [name=teacher-164, age=44, city=BEIJING, profession=TEACHER] , because teacher-164's age is 44. It's out of the range[10-20]
remove person : Person [name=student-165, age=10, city=BEIJING, profession=STUDENT] , because student-165 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-166, age=46, city=BEIJING, profession=TEACHER] , because teacher-166's age is 46. It's out of the range[10-20]
remove person : Person [name=student-167, age=12, city=BEIJING, profession=STUDENT] , because student-167 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-168, age=48, city=BEIJING, profession=TEACHER] , because teacher-168's age is 48. It's out of the range[10-20]
remove person : Person [name=student-169, age=14, city=BEIJING, profession=STUDENT] , because student-169 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-170, age=50, city=BEIJING, profession=TEACHER] , because teacher-170's age is 50. It's out of the range[10-20]
remove person : Person [name=student-171, age=16, city=BEIJING, profession=STUDENT] , because student-171 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-172, age=52, city=BEIJING, profession=TEACHER] , because teacher-172's age is 52. It's out of the range[10-20]
remove person : Person [name=student-173, age=18, city=BEIJING, profession=STUDENT] , because student-173 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-174, age=54, city=BEIJING, profession=TEACHER] , because teacher-174's age is 54. It's out of the range[10-20]
remove person : Person [name=student-175, age=20, city=BEIJING, profession=STUDENT] , because student-175 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-176, age=21, city=BEIJING, profession=TEACHER] , because teacher-176's age is 21. It's out of the range[10-20]
remove person : Person [name=student-177, age=22, city=BEIJING, profession=STUDENT] , because student-177's age is 22. It's out of the range[10-20]
remove person : Person [name=teacher-178, age=23, city=BEIJING, profession=TEACHER] , because teacher-178's age is 23. It's out of the range[10-20]
remove person : Person [name=student-179, age=24, city=BEIJING, profession=STUDENT] , because student-179's age is 24. It's out of the range[10-20]
remove person : Person [name=teacher-180, age=25, city=BEIJING, profession=TEACHER] , because teacher-180's age is 25. It's out of the range[10-20]
remove person : Person [name=student-181, age=11, city=BEIJING, profession=STUDENT] , because student-181 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-182, age=27, city=BEIJING, profession=TEACHER] , because teacher-182's age is 27. It's out of the range[10-20]
remove person : Person [name=student-183, age=13, city=BEIJING, profession=STUDENT] , because student-183 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-184, age=29, city=BEIJING, profession=TEACHER] , because teacher-184's age is 29. It's out of the range[10-20]
remove person : Person [name=student-185, age=15, city=BEIJING, profession=STUDENT] , because student-185 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-186, age=31, city=BEIJING, profession=TEACHER] , because teacher-186's age is 31. It's out of the range[10-20]
remove person : Person [name=student-187, age=17, city=BEIJING, profession=STUDENT] , because student-187 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-188, age=33, city=BEIJING, profession=TEACHER] , because teacher-188's age is 33. It's out of the range[10-20]
remove person : Person [name=student-189, age=19, city=BEIJING, profession=STUDENT] , because student-189 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-190, age=35, city=BEIJING, profession=TEACHER] , because teacher-190's age is 35. It's out of the range[10-20]
remove person : Person [name=student-191, age=21, city=BEIJING, profession=STUDENT] , because student-191's age is 21. It's out of the range[10-20]
remove person : Person [name=teacher-192, age=37, city=BEIJING, profession=TEACHER] , because teacher-192's age is 37. It's out of the range[10-20]
remove person : Person [name=student-193, age=23, city=BEIJING, profession=STUDENT] , because student-193's age is 23. It's out of the range[10-20]
remove person : Person [name=teacher-194, age=39, city=BEIJING, profession=TEACHER] , because teacher-194's age is 39. It's out of the range[10-20]
remove person : Person [name=student-195, age=10, city=BEIJING, profession=STUDENT] , because student-195 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-196, age=41, city=BEIJING, profession=TEACHER] , because teacher-196's age is 41. It's out of the range[10-20]
remove person : Person [name=student-197, age=12, city=BEIJING, profession=STUDENT] , because student-197 is a STUDENT, not is a TEACHER
remove person : Person [name=teacher-198, age=43, city=BEIJING, profession=TEACHER] , because teacher-198's age is 43. It's out of the range[10-20]
remove person : Person [name=student-199, age=14, city=BEIJING, profession=STUDENT] , because student-199 is a STUDENT, not is a TEACHER
a person passed thougth all filters consumes 92.75 μs.

There are 3 person left though the filters.
left: Person [name=teacher-0, age=20, city=BEIJING, profession=TEACHER]
left: Person [name=teacher-70, age=20, city=BEIJING, profession=TEACHER]
left: Person [name=teacher-140, age=20, city=BEIJING, profession=TEACHER]
 
 

猜你喜欢

转载自kanpiaoxue.iteye.com/blog/2316708