gpt4 book ai didi

java - 迭代列表的列表

转载 作者:行者123 更新时间:2023-12-02 08:45:58 26 4
gpt4 key购买 nike

我正在尝试迭代列表操作系统列表,但我总是得到 CME,甚至在迭代列表时使用迭代器删除和添加元素。

我在社区中搜索了类似的问题,但我发现的问题对我没有帮助。真的希望你们能帮助我弄清楚如何做我需要做的事情。

我有我ListIterator<List<Event<T>>> itrListsEvent = partitionSubLists.listIterator(); partitionSubLists是 A list of lists 。所以我有一个更大的列表,其中有四个子列表。

我需要迭代子列表,在迭代时删除和添加元素。完成第一个子列表的迭代后,我需要继续迭代第二个子列表,依此类推。

这是我到目前为止所做的:

  public List<List<Event<T>>> partitionedLists (List<Event<T>> list)
{
int listSize = list.size();
int partitionSize = listSize / 4;

List<List<Event<T>>> partitions = new ArrayList<>();

for (int i = 0; i < listSize; i += partitionSize)
{
partitions.add(list.subList(i, Math.min(i + partitionSize, list.size())));
}
return partitions;
}

List<List<Event<T>>> partitionSubLists = partitionedLists(List<Event<T>>);
ListIterator<List<Event<T>>> itrListsEvent = partitionSubLists.listIterator();

while(itrListsEvent.hasNext())
{
List<PrefixEvent<T>> listPE = new ArrayList<Event<T>>();
listPE = itrListsPrefixEvent.next();
ListIterator<Event<T>> itrEvent = listPE.listIterator();

while(itrEvent.hasNext())
{
//here I remove and add elements inside the sublist.
//when finished, I need to go back to first while and go forward to the next sublists
//and in this moment, i got ConcurrentModificationException

itrEvent.remove()
.
.
.
// some code here

itrEvent.add(new Event<T>);
}

}

最佳答案

目前还不清楚您到底想要实现什么目标。据我了解,你可以这样实现:

List<PrefixEvent<T>>  listPE   = itrListsPrefixEvent.next();
// No iterator.

for (int i = 0; i < listPE.size(); ++i) {
listPE.remove(i);

// some code here

listPE.add(i, new Event<>());
}

这可以避免 ConcurrentModificationException,因为创建迭代器后不会在结构上修改列表。

如果您实际上不需要 itrEvent.remove() 之间的“删除一个元素”列表和itrEvent.add(new Event<T>()) ,您可以继续使用ListIterator ,然后将该值设置为新值:

itrEvent.set(new Event<>());

关于java - 迭代列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61087282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com