Guava
OutOfMemory.CN技术专栏-> Java-> Guava-> 集合增强-> Guava集合:使用Iterators简化Iterator操作

Guava集合:使用Iterators简化Iterator操作

Iterators是Guava中对Iterator迭代器操作的帮助类,这个类提供了很多有用的方法来简化Iterator的操作

Iterators是Guava中对Iterator迭代器操作的帮助类,这个类提供了很多有用的方法来简化Iterator的操作。

1. 判断迭代器中的元素是否都满足某个条件 all 方法

        List<String> list = Lists.newArrayList("Apple","Pear","Peach","Banana");

        Predicate<String> condition = new Predicate<String>() {
            @Override
            public boolean apply(String input) {
                return ((String)input).startsWith("P");
            }
        };
        boolean allIsStartsWithP = Iterators.all(list.iterator(), condition);
        System.out.println("all result == " + allIsStartsWithP);

all方法的第一个参数是Iterator,第二个参数是Predicate<String>的实现,这个方法的意义是不需要我们自己去写while循环了,他的内部实现中帮我们做了循环,把循环体中的条件判断抽象出来了。

2. 通过any判断迭代器中是否有一个满足条件的记录,any方法的参数和all方法一样,就不再具体举例了

3. get方法获得迭代器中的第x个元素

        String secondElement = Iterators.get(list.iterator(), 1);

4. filter方法过滤符合条件的项

        Iterator<String> startPElements = Iterators.filter(list.iterator(), new Predicate<String>() {
            @Override
            public boolean apply(String input) {
                return input.startsWith("P");
            }
        });

filter方法的第一个参数是源迭代器,第二个参数是Predicate的实现,其apply方法会返回当前元素是否符合条件。

5. find方法返回符合条件的第一个元素

        String length5Element = Iterators.find(list.iterator(), new Predicate<String>() {
            @Override
            public boolean apply(String input) {
                return input.length() == 5;
            }
        });

6. transform方法,对迭代器元素做转换

        Iterator<Integer> countIterator = Iterators.transform(list.iterator(), new Function<String, Integer>() {
            @Override
            public Integer apply(String input) {
                return input.length();
            }
        });

上面的例子中我们将字符串转换成了其长度,transform方法输出的是另外一个Iterator.

 

© 内存溢出 OutOfMemory.CN