我有几个数据列表,我偶尔想将它们视为一个列表。
我当前创建一个新列表 (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/