gpt4 book ai didi

java - 循环动态大小的数组

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:47:30 25 4
gpt4 key购买 nike

简而言之,情况是这样的:

for(element : array)
{
execute something that adds new elements to the array;
}

很明显,新添加的元素不会被处理。是否有一种技术可以处理每个元素?

这是这个问题的一个例子:我想,给定一个文件夹,遍历它的深度并将所有文件——无论是在它的 child 下还是在它的 child 的 child 下——直接移动到给定的文件夹下。之后删除所有空文件夹:

Parent Folder
- Level1Folder1
- file1_1
- Level1Folder2
- Level2Folder1
- file2_1
- file2_2
- file1_2

将变成:

Parent Folder
- file1_1
- file1_2
- file2_1
- file2_2

这是我的代码部分:

public static void moveUpOneFolder(Path parent) {

try (DirectoryStream<Path> ds1 = Files.newDirectoryStream(parent)) {
for (Path p1 : ds1) {
//if this node is a dir, traverse its content
if (Files.isDirectory(p1)) {
moveUpOneFolder(p1);
}
//if this node is a file, move it up one level
else {
Path newFileName = parent.getParent().resolve(p1.getName(p1.getNameCount() - 2) + "_" + p1.getFileName());
Files.move(p1, newFileName);
}
Files.delete(p1);
}

} catch (IOException e) {
e.printStackTrace();
}
}

这个递归是行不通的,因为当执行到Level2Folder1时,它会将file2_1和file 2_2向上移动到Level1Folder2,然后继续将file1_2移动到Parent Folder,忽略file2_1和file2_2这两个新添加到文件夹中的元素。发生这种情况是因为 ds1 已经为 for 循环初始化,新元素未添加到此数组/流,因此被忽略。

我想这对于有经验的编码人员来说并不困难,但我真的被卡住了。 :-)

最佳答案

Java 集合通过抛出 ConcurrentModificationException 来拒绝这个问题。 ;)

在这种特殊情况下,我倾向于推荐队列类型的结构;而不是使用 for 循环,而是重复地使元素出队并将更多元素添加到队列的后面。

关于java - 循环动态大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454244/

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