Guava学习之Iterators
来源:互联网 发布:信息流广告数据分析 编辑:程序博客网 时间:2024/05/21 17:42
Iterators类提供了返回Iterator类型的对象或者对Iterator类型对象操作的方法。除了特别的说明,Iterators类中所有的方法都在Iterables类中有相应的基于Iterable方法对应。
性能说明:除非特别说明,所有在这个类中的迭代器都是懒惰的,这意味着在觉得必要的时候,需要提前得到迭代功能。
Iterators类可以通过emptyIterator()方法得到一个空的并且不可改变的List迭代器(EMPTY_LIST_ITERATOR);如下:
UnmodifiableListIterator<Object> objectUnmodifiableIterator = (UnmodifiableListIterator)Iterators.emptyIterator();System.out.println(objectUnmodifiableIterator.hasNext());System.out.println(objectUnmodifiableIterator.hasPrevious());//System.out.println(objectUnmodifiableIterator.next());//System.out.println(objectUnmodifiableIterator.previous());objectUnmodifiableIterator.add("w");
输出结果如下:
falsefalseException in thread "main" java.lang.UnsupportedOperationExceptionat com.google.common.collect.UnmodifiableListIterator.add(UnmodifiableListIterator.java:43)at fresh.qunar.com.Test.main(Test.java:38)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
在输出的结果中抛出了一个异常,原因是Iterators.emptyIterator()返回的是一个空的并且不可改变的List迭代器,所以当向返回的objectUnmodifiableIterator中add一个元素的时候,抛出UnsupportedOperationException异常。
如果需要得到Iterator类型对象的不可改变的(Unmodifiable)副本,可以调用Iterators类中的unmodifiableIterator(final Iterator
判断某个对象是否存在Iterator中可以用contains(Iterator< ?> iterator, Object element)实现,如果iterator中存在element,则返回true;否则返回false。
在Iterator中删除所有出现在elementsToRemove集合中的数据可以用removeAll(Iterator< ?> removeFrom, Collection< ?> elementsToRemove)方法实现。相反,如果需要保存出现在elementsToRetain集合中的所有数据,而其他的都删除可以用retainAll(Iterator< ?> removeFrom, Collection< ?> elementsToRetain)函数实现。
Iterators类中有partition(Iterator
Iterable<String> wyp = Splitter.on(",").split("w,y,p,h,a");Iterator<String> iterator = wyp.iterator();UnmodifiableIterator<List<String>> listUnmodifiableIterator = Iterators.partition(iterator, 3);while (listUnmodifiableIterator.hasNext()){ System.out.println(listUnmodifiableIterator.next());}
输出的结果为:
[w, y, p][h, a]
而如下代码:
Iterable wyp = Splitter.on(",").split("w,y,p,h,a");Iterator iterator = wyp.iterator();UnmodifiableIterator<List> listUnmodifiableIterator = Iterators.paddedPartition(iterator, 3);while (listUnmodifiableIterator.hasNext()) {System.out.println(listUnmodifiableIterator.next());}
输出的结果为:
[w, y, p][h, a,null]
需要注意的是:partition和paddedPartition函数返回的是iterator的视图,当listUnmodifiableIterator.hasNext()为false的时候,iterator的位置将移到最后,也就是Iterators.size(iterator)为0。
Iterators类提供了Iterator和Enumeration之间的转换,函数原型分别为:
public static UnmodifiableIterator forEnumeration(final Enumeration enumeration)public static Enumeration asEnumeration(final Iterator iterator)
更多的关于Iterators的实现,请参见Iterators源码。(完)
本文链接地址: Guava学习之Iterators(http://www.iteblog.com/archives/693)
- Guava学习之Iterators
- Lua 学习之 coroutine as iterators
- Guava学习之Multimap
- Guava学习之BiMap
- Guava学习之Multisets
- Guava学习之旅
- Guava学习之Range
- Guava学习之RangeSet
- Guava学习之RangeMap
- Guava学习之Preconditions
- Guava学习之Splitter
- Guava学习之Lists
- Guava学习之AbstractMapBasedMultimap
- Guava学习之HashBiMap
- Guava学习之CharSequenceReader
- Guava学习之ArrayListMultimap
- Guava学习之Splitter
- Guava 学习之路
- Oracle之 赋予resource角色自动赋予UNLIMITED TABLESPACE权限,回收同理。
- SQL SERVER读书笔记:TempDB
- [每日一题]11gOCP 1z0-052 :2013-09-11 MGR_ROLE role..........................................A66
- 嵌入式C开发基础题(12)
- HDU 1693
- Guava学习之Iterators
- 数据结构 排序算法
- UVA OJ 457 - Linear Cellular Automata
- JFrameHelloWorld
- ADO.NET之SqlDataAdapter对数据库增加、删除、修改篇
- SQL SERVER读书笔记:阻塞与死锁
- Javascript set and get methods Textarea cursor position
- 内存的自动刷新与自刷新
- VC枚举电脑上可用串口