Die richtige Methode aus einer DTO auszurufen

Bitte aktiviere JavaScript!
Hallo zusammen,

ich suche nach einer schlanken Lösung für mein Problem:

ich habe eine Excel datei die sieht wie folgt aus:
11679

das ist ein Beispiel, im Echt sind da keine "bla bla" sondern richtige Sätze, und nicht nur 4 Reihen sondern mehr als 1000.

Zusätzlich habe ich auch eine DTO mit den getter und setter Methoden passend zu den Beschreibungen.
so zum Beispiel:
Code:
@XmlRootElement(name = "holeResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class MeinDTO  {
    @XmlAttribute(name = "blablabla")
    private String blaBlaBla;

   public String getBlaBlaBla() {
        return blaBlaBla;
    }

    public void setBlaBlaBla(String blaBlaBla) {
        this.blaBlaBla= blaBlaBla;
    }
}
Die Spallte A,B und C sind in Kommbination eindeutig, soll heißen, die Kombination 23,1,4 kommt nur einmal in der excel datei vor.

So wie kann ich am Schlanksten die datei lesen die werte speichern und dann die richtigen methoden aufrufen um die Werte zu setzen. ???

danke
 

Anhänge

A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Excel-Tabelle als CSV speichern, dann einlesen. Skizze:
Java:
private String fieldSeparator = ";";

public List<MeinDTO> readCsv(File file) {
    return Files.lines(file.toPath())
        .map(this::toDTO)
        .collect(Collectors.toList());
}

private MeinDTO toDTO(String line) {
    String[] cells = line.split(fieldSeparator);
    MeinDTO result = new MeinDTO();
    result.setA(Integer.parseInt(cells[0]));
    if (Objects.cells[1].isEmpty()) {
        result.setB(Integer.parseInt(cells[1]));
    }
    result.setC(Integer.parseInt(cells[2]));
    result.setDescription(cells[3]);
    result.setValue(Integer.parseInt(cells[4]));
    return result;
}
 
Sorry aber ich verstehe nicht so ganz wie das mir hilft :(.....

Ich lese die Excel datei und speichere die werte schon. in ein hashMap<beschreibung, wert>

Um aus der Beschreibung die richtige Methode herauszufinden ist mein Problem.
 
Ach so. Es geht darum, dass die Beschreibung auf eine Methode abgebildet werden soll. Welchen Parameter soll die Methode denn entgegennehmen?
 
Ehrlich gesagt hab ich noch nichts verstanden...


In der Map steht die Beschreibung als Key und der Wert als Value, also zB:?
Code:
{
  "blablabla" : 100
  "blub blub blub" : 200
  "lalalal lalal": 200
  "sehr witzig": 150
}
Und A, B, und C stehen nirgendwo?
 
Ja weil ich noch nicht weiss, wie ich die da reibbringen soll.
Also Ich lese A, B und C, dann habe ich eine Kombination aus diesen 3 werten, die eindeutig ist. So jetzt kommt die Herausforderung: wie kann ich mir diese Kombination zu Nutze machen, um die richtige Methode (zum Beispiel:
setBlaBlaBla) aufzurufen.

Also ich lese Zeile 9, dann speichere ich mir A, B, C, Beschreibung und Wert. So ich habe also diesen Werte: 23, 1, 4, sehr wiitzig und 150.

Dann gibt es die Methode setWitzig().
so wie kann ich, nach dem ich die zeile gelesen habe, heraus finden, dass die Kombination aus A,B und C zu dieser Methode (setWitzig()) gehört, um den wer 150 da zu setzen.
 
Wie kommt man denn von der Beschreibung ("sehr witzig") auf den Methodennamen ("setWitzig") - unabhängig vom Code, sondern einfach in normalen Worten beschrieben?

Und gibt es dann für alle der über 1000 Zeilen eine entsprechende Methode? Das klingt ein ganz kleines bisschen merkwürdig...
 
Wie kommt man denn von der Beschreibung ("sehr witzig") auf den Methodennamen ("setWitzig") - unabhängig vom Code, sondern einfach in normalen Worten beschrieben?
Ich verstehe nich was du genau meinst, aber das Beisiel jetzt ist vllt schlecht gewählt.
Aber wenn du meinst wie man tatsächlich auf die Methode kommt, genau das ist mein Problem. Deswegen versuche ich mir die Kombination aus A, B und C zu nutze machen. Ich weiss allerdings nicht wie.
Vielleicht mit einer Annotation oder so was . keine Ahnung :(...


Und gibt es dann für alle der über 1000 Zeilen eine entsprechende Methode? Das klingt ein ganz kleines bisschen merkwürdig...
ja das ist tatsächlich merkwürdig, aber so ist es halt. So wird das Verlangt.
 
Ich verstehe nich was du genau meinst, aber das Beisiel jetzt ist vllt schlecht gewählt.
Aber wenn du meinst wie man tatsächlich auf die Methode kommt, genau das ist mein Problem. Deswegen versuche ich mir die Kombination aus A, B und C zu nutze machen. Ich weiss allerdings nicht wie.
Vielleicht mit einer Annotation oder so was . keine Ahnung :(...
Die Beschreibung ist "sehr witzig":

Was ist denn jetzt die Anforderung, die man den passenden Methodennamen auswählt.
Welcher aus "setWitzig", "setSehr" "setSetzig" wäre denn dazu passend?

Irgendeine Anforderung muss es ja geben...


ja das ist tatsächlich merkwürdig, aber so ist es halt. So wird das Verlangt.
Ich würde da auch auf missverstandene Anforderungen tippen...
 
Zuletzt bearbeitet:
Was ist denn jetzt die Anforderung, die man den passenden Methodennamen auswählt.
Welcher aus "setWitzig", "setSehr" "setSetzig" wäre denn dazu passend?
Nein, die Beschreibung "sehr witzig" hat zwei methoden:
getSehrWitzig() und setSehrWitzig().

Die Anforderung lautet:
lese die Excel datei und wenn in einer Zelle der Spalte "Wert" ein Wert gesetzt ist dann setze den Wert für die entsprechenden Beschreibung., das ganze in XML dann ausgeben.

1. Schritt: lesen und finden ist erledigt.
2. Schritt: setzen des Wertes durch die entsprechende getter Methode (Zum Beispiel: getSehrWitzig()) . Wie kann ich herausfinden, welche Methode ich denn aufrufen soll.
Zusätzlich habe ich die Spalten A, B und C als zusatzinfo.
 
Die Anforderung lautet:
lese die Excel datei und wenn in einer Zelle der Spalte "Wert" ein Wert gesetzt ist dann setze den Wert für die entsprechenden Beschreibung., das ganze in XML dann ausgeben.
Das würde für mich nicht zwingend bedeuten, das es für jede Methode einen Setter gibt...


Ist das DTO denn gegeben oder musst du das auch noch schreiben?
 
Mit über tausend Felder mit jeweils Sätzen als Name? o_O

Dann einfach aus dem Satz den Namen des Setters machen, Leerzeichen entfernen und in UpperCamelCase (oder wie auch immer du die Felder benannt hast) überführen und „set“ davor, dann mit Reflection die Methode bekommen und aufrufen...


(Eine Map halte ich weiterhin für deutlich sinnvoller...!
 
Worauf es hinausläuft:

Warum heißen die Methoden nicht "getBeschreibung" und "setBeschreibung", sowie "getWert" und "setWert"?

Dann sind auch "getA" und "setA" kein Problem mehr. Einfach eine Tabellenzeile auf ein DTO mappen und fröhlich auf die Werte zugreifen.
 
Was er will, soweit ich es bisher verstanden habe, ist ein DTO, welches die gesamte Tabelle darstellt, und jede Zeile der Tabelle ist ein Feld im DTO.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben