gpt4 book ai didi

java - 在 HashMap 中遍历另一个对象中的每个对象?

转载 作者:行者123 更新时间:2023-11-29 08:22:27 26 4
gpt4 key购买 nike

让我们假设 Category 本身可能有另一个子类别,并且这些子类别可以有类似的行为,等等。如何为另一个 Category 中的每个 Category 提供最高效的旅行?

public class Category {
private Category parentCategory;
private Map<String, Category> subcategories;
private String name;
// ...
}

我试过的代码:

public void showSubcategoriesRecursively() {
System.out.println(this.getName());
if (!this.getSubcategories().isEmpty()) {
for (Map.Entry<String, Category> entry : this.getSubcategories().entrySet()) {
entry.getValue().showSubcategoriesRecursively();
}
}
}

我不知道如何返回到父 Category 并选择另一个尚未访问过的子类别。

我想要名为 AutomotiveCategoryCar & MotocycleCar 子类别> 还有另一个子类别:NissanToyotaMotocycle 有子类别:ApriliaSuzuki 输出应该是这样的:

Automotive
|_Car
| |_Nissan
| | |_primera
| | |_gtr
| |_Toyota
|_Motocycle
|_Aprilia
| |_rs125
| |_sr150
|_Suzuki

最佳答案

你可以简单地使用这个:

private static void showSubcategoriesRecursively(Category category) {
System.out.println(category.getName());
category.getSubcategories().values().forEach(YourClass::showSubcategoriesRecursively);
}

这将递归遍历所有子项并打印您想要的值。

要使其成为 Category 的公共(public)方法,请使用:

public void showSubcategoriesRecursively() {
System.out.println(this.name);
this.subcategories.values().forEach(Category::showSubcategoriesRecursively);
}

如果你想在子类别的开头有空格,你可以在 Category 中使用这两种方法:

public void showSubcategoriesRecursively() {
showSubcategoriesRecursively(0);
}

private void showSubcategoriesRecursively(int index) {
String spaces = IntStream.range(0, index).mapToObj(i -> "\t|_").collect(Collectors.joining());
System.out.println(spaces + getName());
getSubcategories().values().forEach(c -> c.showSubcategoriesRecursively(index + 1));
}

结果是这样的:

Automotive
|_Car
| |_Nissan
| | |_primera
| | |_gtr
| |_Toyota
|_Motocycle
|_Aprilia
| |_rs125
| |_sr150
|_Suzuki

关于java - 在 HashMap 中遍历另一个对象中的每个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485423/

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