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

我可以包装多个Java排序集,使它们看起来像一个吗?,java,collections,Java,Collections,我有几个数据列表,我想偶尔把它们当作一个列表 我当前创建了一个新列表(newList),然后在现有列表中循环,并执行newList.addAll(thisList) 当我只希望能够循环遍历所有子项时,这非常耗时,并且包含大量的分配 相反,是否有一种方法可以将此列表包装在父迭代器中,然后循环执行此操作?在jdk-8中,您可以使用&,更简单地合并多迭代器,例如: Iterator<T> all = Stream.of(list1,list2,...,listN).stream()

我有几个数据列表,我想偶尔把它们当作一个列表

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

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


相反,是否有一种方法可以将此列表包装在父迭代器中,然后循环执行此操作?

在jdk-8中,您可以使用&,更简单地合并多迭代器,例如:

Iterator<T> all = Stream.of(list1,list2,...,listN).stream()
                                                  .flatMap(List::stream)
                                                  .iterator();
Iterator all=Stream.of(list1,list2,…,listN).Stream()
.flatMap(列表::流)
.iterator();

注意:
flatMap
只需迭代所有要合并的
List
s,而不是
List

中的所有元素,我将创建一个表示列表列表的类,并在其中存储对列表的引用。该列表将实现
迭代器
,以便您可以像任何其他
集合一样对其进行迭代:

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());
    }
}
公共类ListofList实现迭代器{
List lists=新建ArrayList();
private int currentList=0;
专用迭代器;
公共列表(列表…列表){
this.lists.addAll(Arrays.asList(lists));
currentIter=this.lists.get(0.iterator();
}
无效添加(列表){
列表。添加(列表);
}
@凌驾
公共布尔hasNext(){
while(currentList
多亏了rolf schäuble的链接,这个答案提供了一个很好的解决方案:

您是在询问列表还是排序集?标题说明了一件事,问题主体说明了另一件事。使用ArrayList的列表。
。这个问题的首要答案可能是你正在搜索的内容:谢谢Rolf,这是一个很好的策略。谢谢你的贡献。