Вы можете просто использовать это:
private static void showSubcategoriesRecursively(Category category) {
System.out.println(category.getName());
category.getSubcategories().values().forEach(YourClass::showSubcategoriesRecursively);
}
Это будет проходить рекурсивно через все дочерние элементы и печатать желаемое значение.
Чтобы сделать его публичным методом Category
, используйте это:
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