white.apple Geschrieben 22. Oktober 2008 Geschrieben 22. Oktober 2008 Hallo, ich habe ein (Verständnis-)Problem: in meinem Programm lese ich Daten aus einer Datenbank (String). Danach werden sie in einer ArrayList<String> gespeichert. Nachdem der (dynamische) Vorgang abgeschlossen ist, möchte ich die Daten als ein Array<andererTyp> haben. Wie kann ich das lösen? Mir fiel ein: (incoming: String) -- > ArrayList<String> --> AndererTyp[] Angenommen, anderer Typ wäre Integer, dann liefe es so: private Integer[] List2IntegerArray(ArrayList<String> temp) { Integer[] newArray = new Integer[temp.size()]; for( int i = 0; i < newArray.length; i++) { newArray[i] = Integer.valueOf(temp.get(i)); } return newArray; } Aber irgendwie mag ich die Lösung gar nicht :upps Zuerst dachte ich an ArrayList<String> --> String[] --> AndererTyp[], wobei mittels list.toArray(String[0]); erster Schritt gemacht würde. Aber es wäre auch nicht besser, stimmt's? Und da ich eine solche Umwandlung wahrscheinlich öfters benutzen muss, würde ich gerne Verbesserungsvorschläge von Euch hören. Gibt es eine Möglichkeit, EINE for-Schleife ganz wegzulassen? P.S. Bei solchen Konstrukten kann man nicht die erweiterte for-Schleife benutzen, oder? Im Voraus vielen Dank für Eure Geduld:D Zitieren
flashpixx Geschrieben 22. Oktober 2008 Geschrieben 22. Oktober 2008 Was willst Du erreichen? Eine generelle Konvertierung für alle Datentypen sprich "private Object[]..."? Phil Zitieren
white.apple Geschrieben 23. Oktober 2008 Autor Geschrieben 23. Oktober 2008 Ich versuche es anders zu erklären. Ich bekomme: ein String[]. Ich muss - anhand seiner Einträge - unterschiedliche Aufteilung der darin enthaltenen Informationen in andere Datenstrukturen packen (hab ArrayList genommen). Ich brauch am Ende ein AndererTyp[] für jede der Listen. Und hier liegt mein Problem: ich mag ungerne denken, dass ich für jede dieser Listen die Umwandlung für jedes Element durchführen muss. Lässt sich das verallgemeinern? Zitieren
Wayne Geschrieben 23. Oktober 2008 Geschrieben 23. Oktober 2008 Ich persönlich wüsste jetzt keinen Weg das so umzusetzen wie du das möchtest aber irgendwie hört sich das für mich auch alles etwas seltsam an. Wenn die Daten am Ende als Integer vorliegen sollen, warum sind sie dann nicht bereits als Ganzzahl in der DB vorhanden? Ich meine wie stellst du sicher das in dem Array bzw der ArrayList auch wirklich Integer kompatible Werte drin sind? Was passiert wenn nicht etc.? Zitieren
white.apple Geschrieben 23. Oktober 2008 Autor Geschrieben 23. Oktober 2008 Es sind nicht Integer, die am Ende rauskommen. Es war nur als Beispiel angegeben. In Wirklichkeit ist es ein firmeninternes Format um ein Dialogmenü auf der Konsole anzuzeigen(was ich benutzen muss). Es steht nichts weiter dahinter, weil die Werte der Klasse auch nur Strings sind also kompatibel wird's auf jeden Fall. Zitieren
flashpixx Geschrieben 23. Oktober 2008 Geschrieben 23. Oktober 2008 Ich brauch am Ende ein AndererTyp[] für jede der Listen. Was ist "AndererTyp"? Wenn es generalisieren soll, ist es "Object" und warum lieferst Du ein Array und nicht einfach die ArrayList? Ich verstehe nicht, warum Du das umwandelst (ArrayList nach Array)? Wenn Deine Datenbank eine Textdatei ist, dann kannst Du sie zeilenweise lesen, mit Regexpr parsen und zerlegen und dann zeilenweise einen neuen Eintrag in die ArrayList legen. Dabei ist Deine ArrayList dann "ArrayList<myData>" wobei dann "myData" ein Objekt der Form "class myData{ public x1 : int; public x2: String ...}" ist, in dem Du die einzelnen Werte speicherst. Natürlich bei der Umwandlung von String nach int solltest Du auf die try-catches achten. Wenn aber das ganze in einer Datenbank (z.B. SQL) existiert, dann ist das Datenbankdesign fehlerhaft, wenn Zahlenwerte als Strings abgelegt werden, Dann solltest (!) wirklich das Datenbankdesign verändern und die Felder entsprechend mit "getInt" bzw "getString" korrekt aus dem Resultset lesen. Außerdem ist es je nach Datenmenge auch nicht ratsam das komplette Resultset zu cachen (außer es ist aus Designpatterns notwendig) Mir erschließt sich absolut nicht der Sinn der Problemstellung Zitieren
perdian Geschrieben 23. Oktober 2008 Geschrieben 23. Oktober 2008 Wie kann ich das lösen? Mir fiel ein:Du könntest einen StringTokenizer verwenden und direkt das entsprechende Array aus den Quellwerten erstellen. Davon abgesehen - was findest du an deiner Lösung nicht "schön"? P.S. Bei solchen Konstrukten kann man nicht die erweiterte for-Schleife benutzen, oder?Für die Umwandlung String -> Irgendwas geht dies nicht, da String nicht Iterable implementiert (was wiederrum für die Verwendung im erweiterten for Bedingung ist). Zitieren
nekokaburi Geschrieben 24. Oktober 2008 Geschrieben 24. Oktober 2008 Es sind nicht Integer, die am Ende rauskommen. Es war nur als Beispiel angegeben. In Wirklichkeit ist es ein firmeninternes Format um ein Dialogmenü auf der Konsole anzuzeigen(was ich benutzen muss). Es steht nichts weiter dahinter, weil die Werte der Klasse auch nur Strings sind also kompatibel wird's auf jeden Fall. Das versteh ich nicht "weil die Werte der Klasse auch nur Strings sind" was meinst du damit? Nur weil eine Klasse 3 Strings beinhaltet kann man trotzdem nicht so ohne weiteres hin und herwandeln... Am Einfachsten wäre es, du speicherst die Werte nicht als String in die ArrayList sondern direkt als "AndererTyp", dann kannst du es per arrayList.ToString(new AndererTyp[0]) umwandeln! Wenn das nicht geht könnte man sich wohl etwas basteln was von der Funktionsweise grob wie Collection.addAll() funktioniert? (KA müsste man mehr Infos haben was genau AndererTyp ist) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.