声明ArrayList的byte []数组副本的错误返回欺骗性错误消息,说使用迭代器
问题描述:
我想在构建器构造函数中复制byte []数组的ArrayList。我想将arrayLst1复制到arrayLst2。我试着用这个代码做:声明ArrayList的byte []数组副本的错误返回欺骗性错误消息,说使用迭代器
builder.arrayLst2.forEach(item->this.arrayLst1.add(item));
,但我得到了以下错误:
Exception in thread "main" java.util.ConcurrentModificationException
所以谷歌使我迭代here,here和here所以我想这个代码(以及其他变化) 。
for (Iterator itr = builder.arrayLst1.iterator(); itr.hasNext();) {
this.arrayLst2.add(itr.next());
}
第二行给出错误消息“找不到添加方法的合适方法”。
我已经沿着线尝试:
Iterator itr = this.arrayLst.iterator();
builder.arrayLst2.forEach(item->itr.next() );
,但我无法弄清楚如何逐步通过第一阵列1和使用迭代器添加/复制到数组2。
如何克隆一个ArrayList byte []到另一个?我确信必须有一个简单的解决方案,但我找不到它。
编辑:声明错误实际上意味着arraylist没有声明。编译器错误消息指出需要使用迭代器,而不是这样说。
答
this.arrayLst1 = new ArrayList<>(builder.arrayLst2);
或
this.arrayLst1 = new ArrayList<>();
this.arrayLst1.addAll(builder.arrayLst2);
答
感谢这个答案属于#Zaki安瓦尔·哈姆达尼。 我在声明中犯了一个错误。
以下声明有效。
this.flagImgs = new ArrayList <>(this.flagImageFilenames.size());
builder.flagImgs.forEach(item->this.flagImgs.add(item));
让我难堪的是,错误消息没有暗示与声明有关的问题。对迭代器的引用使我大发雷霆。
你可以添加arrayLst1和arrayLst2的声明吗? –
嗨。我已经声明了两个变量,我只是没有在代码片段中显示。 – dazz
这就是为什么你被要求在代码片段中显示它们的原因。发布一个完整的最小示例。您在发布的代码中处处都使用原始类型。不要这样做。从Java 5开始,泛型就存在了。我们在Java 9中。 –