import java.util.List;
import java.util.Objects;
import static java.lang.String.format;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
public class FileSystemPlayground {
static int counter = 0;
static Ordner findFirstOrdnerWithName(Ordner ordner, String name) {
System.out.println(format("%02d | searching in %s ", ++counter, ordner.name));
if (ordner.name == name) {
return ordner;
}
if (isNull(ordner.els) || ordner.els.isEmpty()) {
return null;
}
return ordner.els.stream()
.filter(el -> el instanceof Ordner)
.map(o -> (Ordner) o)
.map(realOrdner -> findFirstOrdnerWithName(realOrdner, name))
.filter(Objects::nonNull)
.findFirst()
.orElse(null);
}
public static void main(String[] args) {
final Ordner root = generateFileSystemStructure();
final String goalName = "goal";
final Ordner goal = findFirstOrdnerWithName(root, goalName);
System.out.printf("\nFound : \'%s\' after searching %d folders",
nonNull(goal) ? goal.name : null,
counter);
}
static Ordner generateFileSystemStructure() {
Ordner root = new Ordner();
root.name = "root";
Ordner o_1 = new Ordner();
o_1.name = "o_1";
Ordner o_2 = new Ordner();
o_2.name = "o_2";
Ordner o_1_1 = new Ordner();
o_1_1.name = "o_1_1";
Ordner o_1_2 = new Ordner();
o_1_2.name = "o_1_2";
Ordner o_1_2_1 = new Ordner();
o_1_2_1.name = "o_1_2_1";
Ordner o_2_1_1 = new Ordner();
o_2_1_1.name = "o_2_1_1";
Ordner o_2_2 = new Ordner();
o_2_2.name = "o_2_2";
Ordner o_2_2_1 = new Ordner();
o_2_2_1.name = "o_2_2_1";
Ordner o_2_2_2 = new Ordner();
o_2_2_2.name = "o_2_2_2";
Ordner o_2_2_3 = new Ordner();
o_2_2_3.name = "o_2_2_3";
Ordner o_2_2_4 = new Ordner();
o_2_2_4.name = "o_2_2_4";
Ordner goal = new Ordner();
goal.name = "goal";
Ordner goal1 = new Ordner();
goal1.name = "goal1";
Ordner goal2 = new Ordner();
goal2.name = "goal2";
Datei datei = new Datei();
datei.name = "datei";
goal.els = List.of(goal1, goal2, datei);
o_1_2_1.els = List.of(goal, o_2_1_1);
o_2_2.els = List.of(o_2_2_1, o_2_2_2, o_2_2_3, o_2_2_4);
o_1.els = List.of(o_1_1, o_1_2);
o_2.els = List.of(o_1_2_1, o_2_2);
root.els = List.of(o_1, o_2);
return root;
}
static class FSElement {
String name;
}
static class Ordner extends FSElement {
List<FSElement> els;
}
static class Datei extends FSElement {
Long groesse;
}
}