多个Iterator的整合应用

迭代器模式Iterator入门:https://blog.csdn.net/dengjili/article/details/79666954

多个Iterator顺序输出(先进先出)

Iterator1:a
Iterator2:12
Iterator3:x,y,z

输出结果:a12,x,y,z

管理器

package headfirst.hd.iterator.eg3;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorManager<T> {

    private List<Iterator<T>> list = new ArrayList<Iterator<T>>();

    public void addIterator(Iterator<T> it) {
        list.add(it);
    }

    public Iterator<T> iterator() {
        List<T> temp = new ArrayList<T>();
        for (Iterator<T> it : list) {
            while (it.hasNext()) {
                T t = it.next();
                temp.add(t);
            }
        }

        return temp.iterator();
    }


}

测试

package headfirst.hd.iterator.eg3;

import java.util.Arrays;
import java.util.Iterator;

public class TestIterator {

    public static void main(String[] args) {
        Iterator<String> it1 = Arrays.asList("a").iterator();
        Iterator<String> it2 = Arrays.asList("1", "2").iterator();
        Iterator<String> it3 = Arrays.asList("x", "y", "z").iterator();

        IteratorManager<String> im = new IteratorManager<>();
        im.addIterator(it1);
        im.addIterator(it2);
        im.addIterator(it3);
        Iterator<String> iterator = im.iterator();

        while (iterator.hasNext()) {
            String string = (String) iterator.next();
            System.out.println(string);
        }
    }

}

测试结果

a
1
x
2
y
z

多个Iterator逆序输出(先进后出)

Iterator1:a
Iterator2:12
Iterator3:x,y,z

输出结果:x,y,z,12a

管理器

package headfirst.hd.iterator.eg3;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;

public class IteratorManagerStack<T> {

    private Stack<Iterator<T>> stack = new Stack<Iterator<T>>();

    public void addIterator(Iterator<T> it) {
        stack.add(it);
    }

    public Iterator<T> iterator() {
        List<T> temp = new ArrayList<T>();
        while (!stack.isEmpty()) {
            Iterator<T> it = stack.pop();
            while (it.hasNext()) {
                T t = it.next();
                temp.add(t);
            }
        }

        return temp.iterator();
    }


}

测试

package headfirst.hd.iterator.eg3;

import java.util.Arrays;
import java.util.Iterator;

public class TestIteratorStack {

    public static void main(String[] args) {
        Iterator<String> it1 = Arrays.asList("a").iterator();
        Iterator<String> it2 = Arrays.asList("1", "2").iterator();
        Iterator<String> it3 = Arrays.asList("x", "y", "z").iterator();

        IteratorManagerStack<String> im = new IteratorManagerStack<>();
        im.addIterator(it1);
        im.addIterator(it2);
        im.addIterator(it3);
        Iterator<String> iterator = im.iterator();

        while (iterator.hasNext()) {
            String string = (String) iterator.next();
            System.out.println(string);
        }
    }

}

测试结果

x
y
z
1
2
a

多个Iterator交替输出(按列优先输出)

Iterator1:a
Iterator2:12
Iterator3:x,y,z

输出结果:a1,x,2,y,z

管理器

package headfirst.hd.iterator.eg3;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorManagerCross<T> {

    private List<Iterator<T>> list = new ArrayList<Iterator<T>>();

    public void addIterator(Iterator<T> it) {
        list.add(it);
    }

    public Iterator<T> iterator() {
        List<T> temp = new ArrayList<T>();
        int size = list.size();

        boolean isOver = true;
        while (isOver) {
            isOver = false;
            for (int i = 0; i < size; i++) {
                Iterator<T> iterator = list.get(i);
                if (iterator.hasNext()) {
                    temp.add(iterator.next());
                    isOver = true;
                }
            }
        }

        return temp.iterator();
    }


}

测试

package headfirst.hd.iterator.eg3;

import java.util.Arrays;
import java.util.Iterator;

public class TestIteratorCross {

    public static void main(String[] args) {
        Iterator<String> it1 = Arrays.asList("a").iterator();
        Iterator<String> it2 = Arrays.asList("1", "2").iterator();
        Iterator<String> it3 = Arrays.asList("x", "y", "z").iterator();

        IteratorManagerCross<String> im = new IteratorManagerCross<>();
        im.addIterator(it1);
        im.addIterator(it2);
        im.addIterator(it3);
        Iterator<String> iterator = im.iterator();

        while (iterator.hasNext()) {
            String string = (String) iterator.next();
            System.out.println(string);
        }
    }

}

测试结果

a
1
x
2
y
z

组合模式与迭代器的整合

具体链接:https://blog.csdn.net/dengjili/article/details/79705777

扫描二维码关注公众号,回复: 2541514 查看本文章

猜你喜欢

转载自blog.csdn.net/dengjili/article/details/79720730