Jeder Employee in der ArrayList besitzt wiederum eine Liste.
Mein Problem liegt nun darin, dass die Zugriffsbefehle sehr sehr lange und kompliziert werden.
Zum Beispiel:
Java:
System.out.println("Mitarbeiter "+ projectMap.get(pPList.get(j).getTasks().get(k).getRequirements().get(l)).get(db).getEmpName()+" arbeitet im Projekt Nr:"+ pPList.get(j).getProjectNr()+" "+ pPList.get(j).getProjectName()+" als "+ pPList.get(j).getTasks().get(k).getRequirements().get(l)+"-Experte");
Gibt es eine Möglichkeit, zum Beispiel eine Referenz auf projectMap.get(pPList.get(j).getTasks().get(k).getRequirements()
zu legen? So dass ich diesen Ausdruck beispielsweise durch eine einfach Variable oder einen kurzen String ersetzen kann?
Also dass ich dann schreiben könnte: o.get(l) und o für den Ausdruck oben stünde?
müßte ja eig. ein String ergeben, wenn ich mich jetzt nicht verguckt habe, richtig?
Dann könnte der Ausdruck schon mal auf
Java:
String o = pPList.get(j).getTasks().get(k).getRequirements().get(l);System.out.println("Mitarbeiter "+ projectMap.get(o).get(db).getEmpName()+" arbeitet im Projekt Nr:"+ pPList.get(j).getProjectNr()+" "+ pPList.get(j).getProjectName()+" als "+ o +"-Experte");
abgekürzt werden.
Je nachdem was jetzt pPList.get(j) liefert, könnte man das evtl. auch noch irgendwie verkürzen.
Java:
//Type t = pPList.get(j);String o = t.getTasks().get(k).getRequirements().get(l);System.out.println("Mitarbeiter "+ projectMap.get(o).get(db).getEmpName()+" arbeitet im Projekt Nr:"+ t.getProjectNr()+" "+ t.getProjectName()+" als "+ o +"-Experte");
Weißt du was mein letztes Problem für heute Nacht ist?
Das ich den DANKE-Button nur einmal anklicken kann bevor er verschwindet ;-)
Du bist echt mein Mann, Wahnsinn wie schnell das geht!
Das ist genau das was ich gesucht hatte.
Ich hatte es vorhin so in der Art probiert, nur hat sich mein "o" dann nicht mit
Veränderung der anderen Variablen in meinen Schleifen angepasst, jetzt passt es allerdings perfekt mit deinem Code!
Nochmals vielen Dank für die äußerst zügige und kompetente Hilfe!
Alternativ könnte man das Auslesen in statische Helper-Methoden packen, da du dir so eventuell NullPointerExceptions einfängst, falls einer der Einträge in der Map, List, ... nicht existiert.
Weiterhin solltest du gegen die Interfaces programmieren:
Außerdem könnte man so Sachen wie employe.getTasks().get(1); durch eine Methode getTask(int i); in Employee abkürzen. (Selbiges gillt dann für Task und getRequirements).
Der gesamte Ausdruck steht schon in einer statischen Helper-Methode, ich habe allerdings noch keinen try-catch Block und fange keine Exceptions auf.
Da ich aber die Liste fülle und mit einer for-Schleife über die size() Methode gehe, dürfte ich im Normalfall doch keine Null-Pointer-Exceptions bekommen? Sind 5 Objekte in der Liste, laufe ich die Schleife ja nur 5 mal durch... oder verwechsel ich da gerad etwas mit der IndexOutOfBounds?
Ich habe meine Liste und Maps mal so angelegt, dass ich gegen die Interfaces programmiere, allerdings muss ich mich dahingehend auf jeden Fall nochmal etwas einlesen - das habe ich bis dato noch nie genutzt.
Das mit der Methode in der Klasse Employee ist etwas schwieriger. Ich glaube du meinst pPList.getTasks()? Die Klasse Emlpoyee hat erstma nichts mit den Tasks zu tun.
Ja, sry. War irgendwie davon ausgegangen, dass du die Methode getTasks() irgendwo auf der List<Employee> aufrufst. Irgendwie habe ich allerdings das Gefühl, da du soviel mit Listen und Maps arbeitest, dass da durch ein anderes Klassendesign sich evtl. etwas vereinfachen lässt.
Ich kann dir ja mal kurz erläutern wie ich das ganze aufgezogen habe.
Ich schreib hier nur ein paar PseudoCode-Schnipsel falls es dir nichts ausmacht.
class Employee:
int nr;
string name;
ArrayList<String> skills
class ProjectPlan
int nr;
string name;
ArrayList<Task> tasks
class Task
int nr;
ArrayList<String> requirements
class Main
ArrayList<Employee> employeeList
HashMap<String ArrayList<Employee>>
Ich Ordne die Mitarbeiter anhand ihrer Fähigkeiten, den Projektplänen mit verschiedenen Aufgabenbereichen zu. Jeder Aufgabenbereich besitzt wiederum eigene requirements.
Ich kann gerne den vollständigen Code posten, habe es allerdings erstmal gelassen, weil es doch sehr unübersichtlich wird.
class Employee:
int nr;
string name;
List<String> skills
class ProjectPlan
int nr;
string name;
List<Task> tasks
class Task
int nr;
List<String> requirements
class Main
List<Employee> employeeList
Map<String, List<Employee>>
Und ja du verwechselst da was. Ich kann in einer Map als Value null hinterlegen obwohl ein Key da ist. Und auch in manchen List-Implementierungen kann man ganz gezielt Null-Elements hinzufügen.