`

非常好的一个集合工具类

阅读更多
今天读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工具类集合

    - 这是一个包含各种静态方法的工具类,用于操作集合,如排序、查找、填充、反转、比较等。 3. `java.util.HashMap` 和 `java.util.TreeMap`: - `HashMap` 是基于哈希表实现的键值对容器,提供O(1)的平均查找速度...

    Java将2个List集合合并到一个List里面并排序工具类

    Java将2个List集合合并到一个List里面并排序工具类 1、Java编程资源,定义了一个名为`ListMerger`的工具类,主要包含一个名为`mergeAndSortLists`的静态方法。此方法用于将两个已经根据时间顺序排列的List合并成一...

    15.java集合工具类(了解)后期扩展.zip

    15.java集合工具类(了解)后期扩展.zip15.java集合工具类(了解)后期扩展.zip15.java集合工具类(了解)后期扩展.zip15.java集合工具类(了解)后期扩展.zip15.java集合工具类(了解)后期扩展.zip15.java集合工具...

    java常用工具类集合(也有转自他人的)

    "java常用工具类集合"是一个综合性的资源,它包含了从不同来源收集的实用工具类,旨在帮助开发者提高效率,减少代码重复。下面,我们将深入探讨这个主题,分析其中可能包含的知识点。 首先,`opslabJutil-master....

    Android真实项目所需要的所有工具类集合

    总的来说,"Android真实项目所需要的所有工具类集合" 是一个非常有价值的资源,它为Android开发者提供了强大的辅助,减少了重复劳动,提升了项目的质量和开发速度。无论你是初学者还是经验丰富的开发者,这个工具包...

    C#常用工具类代码集合Util第二版本(自己工作总结)

    C#常用工具类代码集合Util第二版本(自己工作总结),包括常用工具类,扩展方法工具类,百度地图C#工具类,Echart工具类,Office工具类,Autofac工具类,Web开发常用工具类,Winform开发常用工具类,是自己工作十年...

    ArrayList集合工具类

    ArrayList集合工具类是Java编程语言中的一个重要组成部分,它属于Java集合框架的一部分,主要用来存储一组有序的、可变大小的对象。ArrayList是基于数组实现的,它提供了动态增长的能力,允许我们在列表的任何位置...

    java 工具类代码集合

    Java工具类代码集合是Java开发中非常重要的组成部分,它们提供了许多通用的功能,使得开发者能够更加高效地编写代码,避免重复劳动。在这个集合中,我们通常会看到各种实用的方法,涵盖字符串处理、数组操作、日期...

    这里有一个好东西.Util工具类集合哦~~

    标题提到的"Util工具类集合"可能是一个包含多个实用工具类的资源包,提供了多种功能。下面将详细讨论Util工具类以及可能包含在压缩包中的两个文件`UtilBean.java`和`JDBCBean.java`。 1. **Util工具类**: Util...

    判断集合的工具类

    将collection转换为string. collection中的每个元素都 是自定义类, propertyName object的属性,将集合转成字符串,以,分割。还可以判断集合是否为空

    数组集合应用工具类

    1.将数组转换成list集合 2.将拼接的string字符串转换成list集合 3.将list集合变成元素拼接形式 4.集合去重

    工具类的jar包集合

    标题中的"工具类的jar包集合"指的是一个包含多种实用工具类的Java库,这些类在不同的项目中可以被重复使用以提高开发效率。描述提到这是个人在学习过程中整理的集合,表明这是一个开发者为了方便自己和他人在多个...

    android常用工具类集合(可直接使用)

    这个"android常用工具类集合(可直接使用)"是一个实用的资源,包含了一系列预封装好的函数,方便开发者快速集成到自己的项目中。 1. **字符串处理工具类**:在Android开发中,字符串的处理是非常常见的,如格式化...

    Android-简单的Android工具类包含ActivityFragmentApplication基类和各类常用工具类集合

    以下是对"Android-简单的Android工具类包含ActivityFragmentApplication基类和各类常用工具类集合"这个主题的详细解析。 1. **Activity基类**: - Activity基类通常包含一些通用的方法,如初始化布局、处理权限、...

    sp缓存list集合工具类

    在IT行业中,尤其是在Android开发领域,"sp缓存list集合工具类"是一个常见的概念,它涉及到数据存储和优化。SP通常指的是SharedPreferences,这是一种轻量级的数据存储方式,用于保存应用程序中的简单键值对数据,如...

    android 常用工具类集合

    在Android开发过程中,工具类集合是非常重要的一部分,它们可以极大地提高开发效率,简化代码,使得开发者能够更加专注于业务逻辑。本篇文章将详细讲解"android常用工具类集合"中涉及的关键知识点,包括网络连接、...

    Android常用工具类集合

    本资源“Android常用工具类集合”是一个专门为Android平台设计的库,其中封装了一系列常用的工具方法,旨在简化开发流程。下面将详细介绍这个库中的关键知识点。 1. **网络请求封装**: - 使用RxJava进行网络请求...

    Java常用工具类集合

    在Java编程语言中,工具类集合是一系列实用的类,它们提供了各种通用功能,帮助开发者更高效地编写代码。这些工具类通常包含在Java的`java.util`以及其他相关的包中,如`java.text`,`javax.imageio`,`javax.xml`等...

    iOS常用工具类集合

    提供的文件名“Tool”可能表示这个压缩包包含一个或多个工具类文件,可能以.m和.h的形式存在,分别代表实现文件和接口文件。在iOS项目中,这些工具类通常会被添加到项目的公用类别(Categories)或工具类(Utils)...

Global site tag (gtag.js) - Google Analytics