我有List<int[]>
,我想将其转换为int[][]
我试过这样的话:
private List<int[]> pos = new LinkedList<>();
...
public int[][] getPos() {
int[][] ret = new int[pos.size()][2];
int i = 0;
for (Object o : pos) {
ret[i] = Arrays.stream((int[]) o).toArray();
i++;
}
return ret;
}
在我的情况下,一个大问题是另一个线程正在转换过程中更改List。所以我在我的foreach上得到{{1}}。
还有其他方法可以像使用Streams一样吗?那将是安全的。
此致
答案 0 :(得分:3)
LinkedList
不是线程安全的,因此如果不使用锁/同步,就无法使程序线程安全。
但如果你把它改为例如CopyOnWriteArrayList
它会更容易,您可以安全地迭代它,而其他线程将写入它(但您将只复制启动foreach / iterator时的列表状态,对List
的所有更改在你做另一个foreach / iterator之前不会反映出来。
答案 1 :(得分:2)
更好的解决方案是使用ConcurrentQueue。这是您可以在消费时添加值。注意:在完成复制后,您无法复制任何int[]
。