guava_ch

Using the FluentIterable.filter method

FluentIterable.filter方法使用Predicate作为参数。之后每一个元素都被检查,如果给定的Predicate检查元素返回true则会保留这个元素。如果没有对象满足Predicate,则会返回一个空的Iterable。下面的例子中,展示使用fromfilter方法:

@Before
public void setUp() {
    person1 = new Person("Wilma", "Flintstone", 30, "F");
    person2 = new Person("Fred", "Flintstone", 32, "M");
    person3 = new Person("Betty", "Rubble", 31, "F");
    person4 = new Person("Barney", "Rubble", 33, "M");
    personList = Lists.newArrayList(person1, person2, person3,person4);
}

@Test
public void testFilter() throws Exception {
    Iterable<Person> personsFilteredByAge= FluentIterable.from(personList).filter(new Predicate<Person>() {
        @Override
        public boolean apply(Person input) {
            return input.getAge() > 31;
        }
    });
    assertThat(Iterables.contains(filtered,is(true));
    assertThat(Iterables.contains(filtered,is(true));
    assertThat(Iterables.contains(filtered,is(false));
    assertThat(Iterables.contains(filtered,is(false));

setUp方法内,我们建立一个通过调用Lists.newArrayList()静态工厂方法建立持有四个对象的personList。然后在testFilter方法内,我们建立personsFilteredByAge,通过传递personList为参数给FluentIterable.from方法,再使用Predicatefilter方法的参数组成过滤链。 在asserThat语句中,使用Iterables.contains方法来验证结果。Iterables是一个处理Iterable实例的工具类。