今天读Heritrix看到这么个类,设计非常棒,多个集合的合并其实并不需要新建集合对象,并进行数据搬移。
public class CompositeIterator<E> implements Iterator<E> {
protected ArrayList<Iterator<E>> iterators = new ArrayList<Iterator<E>>();
protected Iterator<E> currentIterator;
protected int indexOfCurrentIterator = -1;
/**
* Moves to the next (non empty) iterator. Returns false if there are no
* more (non empty) iterators, true otherwise.
* @return false if there are no more (non empty) iterators, true otherwise.
*/
private boolean nextIterator() {
if (++indexOfCurrentIterator < iterators.size()) {
currentIterator = iterators.get(indexOfCurrentIterator);
// If the new iterator was empty this will move us to the next one.
return hasNext();
} else {
currentIterator = null;
return false;
}
}
/* (non-Javadoc)
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
if(currentIterator!=null && currentIterator.hasNext()) {
// Got more
return true;
} else {
// Have got more if we can queue up a new iterator.
return nextIterator();
}
}
/* (non-Javadoc)
* @see java.util.Iterator#next()
*/
public E next() {
if(hasNext()) {
return currentIterator.next();
} else {
throw new NoSuchElementException();
}
}
/* (non-Javadoc)
* @see java.util.Iterator#remove()
*/
public void remove() {
throw new UnsupportedOperationException();
}
/**
* Create an empty CompositeIterator. Internal
* iterators may be added later.
*/
public CompositeIterator() {
super();
}
/**
* Convenience method for concatenating together
* two iterators.
* @param i1
* @param i2
*/
public CompositeIterator(Iterator<E> i1, Iterator<E> i2) {
this();
add(i1);
add(i2);
}
/**
* Add an iterator to the internal chain.
*
* @param i an iterator to add.
*/
public void add(Iterator<E> i) {
iterators.add(i);
}
}
分享到:
相关推荐
网上有好多实体转另一个实体的方法,但是几乎没有实体集合直接转另一个实体集合的工具类,自己写了一个,供大家使用。其实原理很简单,就是泛型。
常用的Java类集合。
ArrayList集合工具类
15.java集合工具类(了解)后期扩展.zip15.java集合工具类(了解)后期扩展.zip15.java集合工具类(了解)后期扩展.zip15.java集合工具类(了解)后期扩展.zip15.java集合工具类(了解)后期扩展.zip15.java集合工具...
java 工具类代码集合 java 工具类代码集合 java 工具类代码集合
将collection转换为string. collection中的每个元素都 是自定义类, propertyName object的属性,将集合转成字符串,以,分割。还可以判断集合是否为空
这个包里面包括了Java对数据和日期的处理,以及对图像处理、XML处理和HTML处理等工具类,另外还有其他一些有用类。
1.将数组转换成list集合 2.将拼接的string字符串转换成list集合 3.将list集合变成元素拼接形式 4.集合去重
C#常用工具类代码集合Util第二版本(自己工作总结),包括常用工具类,扩展方法工具类,百度地图C#工具类,Echart工具类,Office工具类,Autofac工具类,Web开发常用工具类,Winform开发常用工具类,是自己工作十年...
sp缓存list集合工具类
该集合工具类简洁的帮你完成 集合分组、求并集、交集、差集、排序、判空、去重、排重、判重
louisPy一个实用的Python工具类集合
工具类集合 MLog工具类 日期获取工具类 网络检查工具类 权限检查工具类 MD5工具类 日志保存工具类 SheetDialog 底部弹出框 LogcatHelper.getInstance(this).start(filePath); 开启保存日志 LogcatHelper....
简单的Android工具类,包含Activity、Fragment、Application基类,和各类常用工具类集合
基本涵盖常用的工具类集合,其中也综合了别人的示例及经验,希望大家可以互通有无,当然也需要持续更新。
NULL 博文链接:https://vinci-zhang.iteye.com/blog/277343
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你...
Java将2个List集合合并到一个List里面并排序工具类 1、Java编程资源,定义了一个名为`ListMerger`的工具类,主要包含一个名为`mergeAndSortLists`的静态方法。此方法用于将两个已经根据时间顺序排列的List合并成一...
安卓编程的常用类集合,比如网络连接,字符处理,文件处理等
Android开发不得不收集的工具类集合, 工欲善其事必先利其器!Android开发过程经常需要用到各式各样的工具类,虽然大部分只需谷歌/百度一下就能找到;但是有时候急需使用却苦苦搜寻不到。于是给大家介绍一个github上...