Objekt aus Liste in Liste suchen/löschen

MrTobi

Mitglied
Hallo ich habe mal wieder eine Frage.
Folgendes Problem:

Ich habe eine Liste mit eigenen Objekten welche bestimmte Eigenschaften haben.

[Java]List<DataHolder> listinputHolders = myparser.readInputExcel();[/Java]

Nun Sind die Objekte folgender maßen aufgebaut:

Java:
public class DataHolder {
	private String sMatnr;
	private int iWFG;
	private String sPlaner;
	private List<String> lAplNr = new ArrayList<String>();

             public List<String> getlAplNr() {
		return lAplNr;
	}
	
             public void setlAplNr(String lAplNr) {
		this.lAplNr.add(lAplNr);
	}

+ Restliche Getter/Setter/Konstruktoren

Nun will ich folgendes machen: Alle Objekte, die die selbe sMatnr haben sollen zu einem Objekt zusammengeführt werden und in der orginal Liste gelöscht werden.

z.b: Objekt 1 : sMatnr = "AG12"
iWFG = 102
sPlaner = "KL"
lAplNr{01-000} (Inhalt der Liste als Verdeutlichung)

Objekt 2 : sMatnr = "AG12"
iWFG = 102
sPlaner = "KL"
lAplNr{01-100} (Inhalt der Liste als Verdeutlichung)


Objekt 3 : sMatnr = "AG12"
iWFG = 102
sPlaner = "KL"
lAplNr{01-200} (Inhalt der Liste als Verdeutlichung)

-> Zusammengeführtes Objekt:

sMatnr = "AG12"
iWFG = 102
sPlaner = "KL"
lAplNr{01-000, 01-100, 01-200} (Inhalt der Liste als Verdeutlichung)


Am Ende will ich praktisch eine Liste haben wo es keine Objekte mehr gibt die die selbe sMatnr haben, und eben die lAplNr zusammengeführt sind.

Ich hab was versucht aber das gibt immer nur Objekte mit maximal 2 lAplNr zurück.

Java:
for(int i = 0; i <inputHolders.size();i++ ){
			
			for(int a = 1; a < inputHolders.size();a++){
				
				if((inputHolders.get(i).getsMatnr()).equals((inputHolders.get(a).getsMatnr()))){
					inputHolders.get(i).setlAplNr((inputHolders.get(a).getlAplNr()).get(0));
					inputHolders.remove(inputHolders.get(a));
					
					
				}
			}
			
		}

Ich seh den Fehler nicht. Hab auch schon den Degugger heiß laufen lassen

Für eure Hilfe bin ich wie immer sehr dankbar.

Mit freundlichen Grüßen
MrTobi
 

darekkay

Bekanntes Mitglied
Mit deiner Methode wirst du doch alle (bis auf das erste) Elemente mit sich selbst vergleichen (z.B. i = 1; a = 1) und der Vergleich wird immer true liefern. Elemente aus einer Liste zu entfernen, die du mit einer Variable iterierst, kann auch nur schief gehen (i wird immer um eins erhöht. Löscht du ein Element in der Mitte, überspringst du dein nächstes Element, da alle nachfolgenden nachgerückt sind).

Erstelle eine neue Liste. Gehe deine ursprüngliche Liste durch und schaue, ob die ID bereits vorhanden ist. Falls ja, füge die lAplNr hinzu, ansonsten den ganzen Eintrag.
 

MrTobi

Mitglied
Ich hab nun deine Variante mal versucht allerdings bleibt das Ergebnis das selbe. Kannst du eventuell etwas ganauer auf deinen Vorschlag eingehen ich vermute ich hab ihn falsch umgesetzt.

Wäre super nett :)

Java:
List<DataHolder> lsortedHolders = new ArrayList<DataHolder>();
		lsortedHolders.add(inputHolders.remove(0));
		
		for(int i = 0; i <lsortedHolders.size();i++ ){

			for(int a = 0; a < inputHolders.size();a++){
				
				if(lsortedHolders.get(i).getsMatnr().equals(inputHolders.get(a).getsMatnr())){
					
					lsortedHolders.get(i).setlAplNr(inputHolders.get(a).getlAplNr());
					inputHolders.remove(inputHolders.get(a));
					a=0;
				}else{
					lsortedHolders.add(inputHolders.remove(a));
					a=0;
				}
			}
		}

Nur das Ankucken ich hab die lAplNr Listen in DataHolder durch Strings ersetzt (fals sich jemand wundert wie die nun hinzugefügt werden)
 

darekkay

Bekanntes Mitglied
Zunächst eine exists-Methode (ungetestet):

Java:
int exists(DataHolder dataHolder, List<DataHolder> list){
    for (int i = 0; i<list.size(); i++){
		if (list.get(i).getsMatnr().equals(dataHolder.getsMatnr()))
			return i;
		}
	return -1;
}

Liefert -1, falls das Element nicht in der Liste vorhanden ist, ansonsten dessen Position.

Nun gehst du inputHolders durch und wendest diese Methode auf jedes Element an. Bei "-1" kannst du es hinzufügen, ansonsten fügst du deine lAplNr dem Element zu (deswegen auch int als Rückgabewert).
 

thE_29

Top Contributor
Du könntest in deiner Datenklasse die Methode

Java:
public boolean equals(Object o)
überschreiben, sowie bei der Liste die add-Methode..

Die equals Methode liefert dann true zurück, wenn die lApNr die gleiche ist (musst halt noch schnell implementieren)

In der add Methode machst du zuerst ein indexOf(o) um den Index zu ermitteln! Falls nicht -1, dann hol das von dem Index und adde die Daten dazu, ansonsten mach ein super.add!

So ungefähr:
Java:
        List<DataHolder> list = new Vector<DataHolder>(){
        	public boolean add(DataHoldero)
        	{
        		int tmpIndex = indexOf(o);
        		if(tmpIndex != -1)
        		{
        			DataHolder tmp = get(tmpIndex);
        			//hier die Werte addieren/seten, etc. -> nochmals muss du es nicht in die Liste speichern, weil es ja das gleiche Objekt ist
        			return true;
        		}
        		//falls nicht gefunden, dann fuege es in die Liste ein
        		else
        			return super.add(o);
        	}
        };
 
V

vanny

Gast
Ich würde mir eine Wrapperklasse schreiben, die all diese Daten hält und per getKey() einen Schlüssel liefert.
Dann packt man das ganze in eine HashMap/HashTable/HashSet je nach geschmack und kann über den Key zugreifen.
In die Wrapperklasse kommt dann noch eine add-Methode, die dann deine lAplNr zusammensetzt.

Vorteil ist 1. der einfache Vergleich per Key und du hast mehr Kontrolle über das Zusammenfügen, weil es die Wrapperklasse selbst übernimmt.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

MrTobi

Mitglied
Hi erstmal vielen Dank für die vielen Antworten.
Ich hab jetzt die euqals-Methode überschrieben und dann wie zu Beginn von darekkay vorgeschlagen 2 Listen benutzt. Nun funktioniert das ganze.

Vielen Dank an euch wie immer sehr gute Hilfestellungen.

Grüße
MrTobi
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
L Zugriff auf Objekt das sich in einer Liste befindet Allgemeine Java-Themen 2
N Prüfen ob Objekt in Liste enthalten ist Allgemeine Java-Themen 17
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
A Iterationen einer XML-Datei in einem Objekt sichern Allgemeine Java-Themen 5
R Objekt zur Laufzeit zerstören? Allgemeine Java-Themen 12
hdi Frage zur Objekt Initialisierung Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben