java - 我可以包装多个 Java 排序集,使它们看起来像一个吗?

标签 java collections

我有几个数据列表,我偶尔想将它们视为一个列表。

我当前创建一个新列表 (newList),然后循环遍历现有列表,并执行 newList.addAll(thisList)

当我只是希望能够循环遍历所有子项时,这非常耗时,并且包含大量分配。

相反,有没有一种方法可以将此列表美观地包装在父迭代器中,然后循环遍历它?

最佳答案

我将创建一个表示列表列表的类,并在其中存储对列表的引用。该列表将实现Iterator,以便您可以像任何其他Collection一样迭代它:

public class ListOfLists<U> implements Iterator<U> {

    List<List<U>> lists = new ArrayList<>();

    private int currentList = 0;
    private Iterator<U> currentIter;

    public ListOfLists(List<U>... lists) {
        this.lists.addAll(Arrays.asList(lists));

        currentIter = this.lists.get(0).iterator();
    }

    void add(List<U> list) {
        lists.add(list);
    }

    @Override
    public boolean hasNext() {
        while (currentList < lists.size() - 1 && !currentIter.hasNext()) {
            currentList++;
            currentIter = lists.get(currentList).iterator();
        }

        return currentIter.hasNext();
    }

    @Override
    public U next() {
        while (currentList < lists.size() - 1 && !currentIter.hasNext()) {
            currentList++;
            currentIter = lists.get(currentList).iterator();
        }

        return currentIter.next();
    }

    public static void main(String... args) {
        List<Integer> l1 = Arrays.asList(1, 2, 3, 4);
        List<Integer> l2 = Arrays.asList(5, 7, 9);
        List<Integer> l3 = Arrays.asList(42, 43, 44);

        ListOfLists<Integer> ii = new ListOfLists<>(l1, l2, l3);

        while (ii.hasNext())
            System.out.println(ii.next());
    }
}

关于java - 我可以包装多个 Java 排序集,使它们看起来像一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44155467/

相关文章:

java - Android 编程新手,尝试创建导致登录屏幕的登录按钮。当我单击登录按钮时,应用程序显示 "stopped working"

java - Producer/Consumer——生产者无阻塞地向集合中添加数据,消费者批量消费集合中的数据

c# - 使用第二个线程访问领域模型

java - Android 服务 - SocketIO - GCM - 与 Activity 通信

java - 对 ArrayList 内的原始数组进行索引 - Java

java - 对集合调用 addFirst

collections - 如何通过元素的属性将集合转换/转换为另一个集合?

java.lang.UnsatisfiedLinkError : Couldn't load from loader findLibrary returned null

java - QR 的 ESC/POS 命令仅打印内容

java - Hibernate 和 Oracle 序列