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.