Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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?

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

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.

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.