Object aus Teil einer ArrayList

Joerg66

Erfahrenes Mitglied
Hallo,

Ich habe eine AreaListe aus der ich Teile in eine Map speichern will/muss

Code:
int Start =1;
private static ArrayList <String>wkzWechselList;
Map w = (Map)spalte.get(s);

Die AreaList wird im Code bearbeitet und soll dann in die Map eingfügt werden folgende Zeile funktioniert einwandfrei
Code:
w.put(new Integer(String.valueOf(zeile)),(Object)wkzWechselList);

Nur leider ist dann ja die komplette AreaListe eingefügt. Ich bräuchte sowas wie
Code:
w.put(new Integer(String.valueOf(zeile)),(Object)wkzWechselList.subList(Start, wkzWechselList.size()));

Was aber natürlich nicht hinhaut. Aber wie mach ich's ? Die Map und alles andere MUSS genau so bleiben und als Ausgangsbasis hab ich die AreaListe. Daran darf nichts verändert werden, dieses ist eine Erweiterung eines fertigen Programmes.

Kann mir jemand helfen ?
Gruss Joerg
 
Hallo,

erstmal habe ich Fragen.

Was ist eine AreaList? Kann es sein, dass du ArrayList meinst?
Warum castet du deine Liste beim einfügen in die Map auf Object?

Warum machst du es nicht einfach so, wie du es selbst schon vorgeschlagen hast?
Code:
w.put(new Integer(String.valueOf(zeile)),(Object)wkzWechselList.subList(Start, wkzWechselList.size()));

Du sagst das würde nicht funktionieren. Also denke ich mal, dass da ein Fehler auftritt.
Dazu sage ich dann mal, dass du auf die übergebenen Indeces achten solltest.
Zum Beispiel
Code:
wkzWechselList.size()
ist immer eins größer als der letzte Index der Liste, weil die Liste bei 0 anfängt zu zählen und nicht bei 1.

MFG

Sascha
 
Hallo,
erstmal ein grosses Sorry ! Natürlich meinte ich ArrayList, hatte nur kurz vorher einen Bericht gelesen, in dem das Wort Areal mehrfach vorkam und da bin ich dann ins tüddeln gekommen.
Das Programm, um das es hier geht ist ein Postprozessor für NC-Programme. Nicht von mir geschrieben, sondern von einem Kollegen, der nicht mehr in unserer Firma ist. Da ich hier als NC-Programmierer arbeite, wurde ich verdonnert eine Änderung einzubauen. Soweit ich den Code verstehe, werden mehrere HashMaps erzeugt, in einer stehen die Zeilenzahl, in den anderen dann X, Y, Z, ... usw. immer eine Hash für eine Spalte. Und in eine der HashMaps muss jetzt mit "put" dieser ArrayList-Teil eingefügt werden. Bisher war es die ganze Liste. Dieses "put" will aber ein Object übergeben, sonst gibts da einen Fehler.
Das ich, Code:
wkzWechselList.size()-1
schreiben muss habe ich bedacht. Der Fehler (Absturz) tritt auch nicht direkt an dieser Stelle auf, sondern bei der Ausgabe des Übersetzten Programmes auf den Bildschirm. Da aber nur diese eine Zeile verändert wurde, habe ich einfach geschlussfolgert, das es mit subList nicht geht. Ich versuch mal rauszufinden, woran er sich genau stört.
Aber wenigstens weiss ich jetzt das die Einfügerei i.o. ist
Vielen Dank für die freundliche Antwort
Gruss Joerg
 
Hier ist sie:
Code:
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.SubList.checkForComodification(Unknown Source)
	at java.util.SubList.listIterator(Unknown Source)
	at java.util.AbstractList.listIterator(Unknown Source)
	at java.util.SubList.iterator(Unknown Source)
	at java.util.AbstractCollection.toString(Unknown Source)
	at DreiDPP.NCPEditor.setprogrammText(NCPEditor.java:501)
	at DreiDPP.NCPEditor.ppDEPO1060NT(NCPEditor.java:855)
	at DreiDPP.NCPEditor.addMaschinePP(NCPEditor.java:694)
	at DreiDPP.NCPEditor.postProzessing(NCPEditor.java:675)
	at DreiDPP.NCPEditor$2.widgetSelected(NCPEditor.java:178)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:90)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
	at DreiDPP.NewHaendlerMain.mainLoop(NewHaendlerMain.java:59)
	at DreiDPP.NewHaendlerMain.main(NewHaendlerMain.java:50)

Der Code:
Code:
	public static void setprogrammText(){
	    int intspalte =0;
	    int zeile =0;
	    Object o = get(intspalte++, zeile);
	    while (zeile < BottomZeile+1){
	        while (intspalte < 12){
	            if (o == null){
	                sb.append(" ");
	                o = get(intspalte, zeile);
	                intspalte++;
	            }
                else if (o.toString().startsWith("[")){
                    listArray(o);
                    o = get(intspalte, zeile);
                    intspalte++;
                }
                else{
                    sb.append(o.toString()+" ");
                    o = get(intspalte, zeile);
                    intspalte++;
                }
	        }
	        sb.replace(sb.length()-1,sb.length(),"\n");
	        intspalte =0;
	        zeile++;
	        o = get(intspalte++, zeile);
	    }
	    editor.append(sb.substring(0,sb.length()-1));
	}

"sb" = StringBuffer
"editor" = StyledText

Zeile 501 = else if (o.toString().startsWith("[")){

hilft das weiter?
 
Nee nicht so recht ich weiß ja nicht was o überhaupt für ein Objekt ist. Ist ein wenig unschön einfach mit einem Object zu arbeiten.

Die Doku zu SubList sagt auf jeden Fall:
Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive. (If fromIndex and toIndex are equal, the returned list is empty.) The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa.

Die Exception besagt dass du gleichzeitig über die Liste iterierst und sie währenddessen veränderst und das ist nicht erlaubt.

Wenn du die SubList in eine neue List packst sollte es gehen.

w.put(new Integer(String.valueOf(zeile)),new ArrayList(wkzWechselList.subList(Start, wkzWechselList.size())));
 
Zurück