Zum Inhalt springen

[newbie] Typ eines Array ändern


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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?

Geschrieben

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.?

Geschrieben

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.

Geschrieben

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

Geschrieben
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).
Geschrieben
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)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...