作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我们假设 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
并选择另一个尚未访问过的子类别。
我想要名为 Automotive
的 Category
和 Car
& Motocycle
和 Car
子类别> 还有另一个子类别:Nissan
和 Toyota
。 Motocycle
有子类别:Aprilia
和 Suzuki
输出应该是这样的:
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/
我是一名优秀的程序员,十分优秀!