Datentypen Umwandlung von Arraylist in ein StringArray

jdk

Mitglied
Hallo,

ich habe eine Arraylist in dem Strings und BigDecimal-Werte enthalten sind.

Nun möchte ich daraus ein StringArray machen.

Folgendes habe ich probiert.

Java:
	public String[] toArray(List<ProduktTO> produkte) {
		Object x[] = new Object[produkte.size()];
		x = produkte.toArray(x);
		for (Object i : x)
			System.out.println(i.toString());
		
		String[] y = Arrays.asList(x).toArray(new String[x.length]);
		System.out.println(y);
		return y;			
	}


Dieses
Java:
String[] y = Arrays.asList(x).toArray(new String[x.length]);
habe ich mir im Internet gesucht, ohne es wirklich zu verstehen.

Es funktioniert auch nicht. Er bringt:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays$ArrayList.toArray(Unknown Source)
at model.CSVImpFassade.toArray(CSVImpFassade.java:40)
....


:bahnhof:

Das einzige, was ich weiss ist, dass die Umwandlung eines Arraylist in ein Array ein ObjectArray zurückgibt, aber wie wandle ich das ObjektArray in ein StringArray um?

OT: Ich finde Java unheimlich schwierig. Schön langsam brauche ich psychologische Betreuung. 🙁

Liebe Grüße
JDK
 
Zuletzt bearbeitet:
Ein ProduktTO ist nun mal kein String - genauso wenig wie ein Videofilm ein Buch ist.
Grundsätzlich stellt sich für mich die Frage, wofür diese Umwandlung.

Besitzt die Klasse ProduktTO eine Methode, die einen beschreibenden String zurück gibt, eventuell ist ja die toString() entsprechend überschrieben.
Dann könnte man ein String Array mit der Größe der Liste anlegen und dieses über eine for Schleife, mittels dieser Methode befüllen.
 
ProduktTO ist eine Transferklasse, wo nur Getter und Settermethoden enthalten sind.

unter anderem diese

Java:
public List<ProduktTO> getProducts() {
		return products;
	}
	public void setProducts(List<ProduktTO> products) {
		this.products = products;
	}

Ich hole mir die Produkte von einer Datenbank mit


Java:
public List<ProduktTO> selectAllProducts() {
		List<ProduktTO> list = new ArrayList<ProduktTO>();
		Statement stmt = null;
		ResultSet rs = null;

		try {
			stmt = con.createStatement();
			String strSQL = "SELECT * from tblProdukt ORDER BY ProdId";
			rs = stmt.executeQuery(strSQL);
			while (rs.next()) {
				ProduktTO to = new ProduktTO();
				to.setProdId(rs.getString(1));
				to.setProduktArt(rs.getString(2));
				to.setBezeichnung(rs.getString(3));
				to.setGewicht(rs.getBigDecimal(4));
				to.setRundfaktor(rs.getBigDecimal(5));
				to.setAbschlag(rs.getBigDecimal(6));
				to.setAufschlag(rs.getBigDecimal(7));
				to.setVkfA(rs.getBigDecimal(8));
				to.setVkfB(rs.getBigDecimal(9));
				to.setVkfC(rs.getBigDecimal(10));
				to.setKaufA(rs.getBigDecimal(11));
				to.setKaufB(rs.getBigDecimal(12));
				to.setKaufC(rs.getBigDecimal(13));
				list.add(to);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				stmt.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
		return list;
	}


Vielen Dank und liebe Grüße
JDK
 
Java:
  public String[] toArray(List<ProduktTO> produkte) {
        
   int i = 0;
   String x[] = new String[produkte.size()];
        
        for(ProduktTO p : produkte){
                  x[i]=p.toString();
                  i++;
             }

          return x;
    }

Für sinnvolle Werte musst du natürlich toString() in ProduktTO überschreiben.
edit: Warum brauchst du unbedingt das Array?
 
Danke!

Hab das mal so eingebaut


Java:
	public String[] toArray(List<ProduktTO> produkte) {
		String[]y = new String[produkte.size()];
		for(int i=0; i <produkte.size(); i++) {
			Object currentObj = produkte.get(i);
			y[i] = new String(currentObj instanceof BigDecimal ? ((BigDecimal) currentObj).toString():(String)currentObj);
			System.out.println(y[i]);
		}				
		return y;		
	}


Gibt zurück

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: model.ProduktTO cannot be cast to java.lang.String
at model.CSVImpFassade.toArray(CSVImpFassade.java:51)
at model.CSVImpFassade.toArray(CSVImpFassade.java:1)
at control.MainControl.csvWartung(MainControl.java:247)

Betrifft die Zeile
y = new String(currentObj instanceof BigDecimal ? ((BigDecimal) currentObj).toString()🙁String)currentObj);


Kenn mich mit diesem Konstrukt nicht aus. :bahnhof:

Liebe Grüße
JDK


Nachtrag: Dort wor der Traurigsmilie im Zitat ist, sollte : ( stehen.....Das hat er automatisch in einen Traurigsmilie umgewandelt.
 
Zuletzt bearbeitet:
Java:
List<ProduktTO> produkte
In deiner Liste sind doch ausschließlich ProduktTO Objekte. Warum prüfst du ob das instanceof BigDecimal ist?
Es reicht wenn du einfach
Java:
String obj = produkte.get(i).toString();
aufrufst und in der ProduktTO Klasse die toString Methode überschreibst.
 
warum baust du dieses Konstrukt ein wenn du dich damit nicht auskennst?
hat das hier jemand vorgeschlagen? gibt auch normale if und else

generell fraglich:
in der Liste sind ProduktTO-Objekte, du schaust ob diese BigDecimal sind (warum?) und castest sie anderenfalls auf String..
 
Ich sag vorerst einmal DANKE!

Ich möchte es aber bis morgen noch offen halten, weil etwas funktioniert noch nicht ganz so, aber da schaue ich selber mal vorerst.

Danke für Eure Unterstützung! Und bitte daran denken, dass ich Anfänger bin und ich noch nur Arrays und Sterne sehe, die sich in ungeordnete Bahnen bewegen.

Liebe Grüße
JDK
 
Warum nicht einfach das toString in der Produkt Class Überschreiben?
Und warum kommt mir das hier so bekannt vor?

Ahh gefunden :
http://www.java-forum.org/java-basi...aylisten-auslesen-kommt-nur-quatsch-raus.html

[Java]
// Produkt class

@Override
public String toString() {
return getName() + " " + Double.toString(getPreis());
}

// Main

List<ProduktTO> produkte;
String[] stringArray = new String[produkte.size()];

for(int i = 0; i < produkte.size() ; i++) {
stringArray = produkte.get(i).toString();
}
[/Java]
 
Zuletzt bearbeitet:

Zurück
Oben