ich bin neu im Forum und auf der suche nach einem Lösungsansatz.
Habe bereits gegoogelt aber nix gefunden. Hier zu meinem Problem.
Ich habe zwei ArrayLists die ich miteinander vergleiche über
list1.equals(list2). Das Funktioniert auch soweit.
Mein Ziel ist es aber: wenn List1 nicht gleich List2 ist, hätte ich gerne nur neue Einträge also diese die nicht in List2 sind ausgegeben, oder in eine dritte Liste kopiert. Wie stelle ich das an.
PS: Ich bin Einsteiger, fange also gerade dem Programmieren an.
Da hast du verschiedene Möglichkeiten, die sich hinsichtlich Speicherbedarf und Laufzeitverhalten mitunter stark unterscheiden können.
Der einfachste Weg wäre einfach für jedes Element aus der ersten Liste zu schauen, ob es in der zweiten Listen vorhanden ist. Zum Beispiel in zwei geschachtelten Schleifen.
Bedenke bei der Prüfung aber auch, dass Listen auch null aufnehmen können.
Code:
für jeden Element e1 in Liste1
für jedes Element e2 in Liste2
wenn e1 gleich e2 dann mach dies
sonst mache jenes
ende wenn
ende für
ende für
Ok, danke dir für die schnelle Antwort.
Hatte gerade Folgende idee. Ich kopiere beide Listen in eine dritte (.add) und lösche alle doppelten.
Ist das evtl besser, eleganter als alle Elemente miteinalder zu vergleichen?
Das liefert dir nicht das gewünschte Ergebnis zurück:
Beispiel:
Liste1 = { 1 , 2 }
Liste2 = {1 , 3 }
Bei deiner Variante würde nun herauskommen: Liste 3 = { 1, 2, 3 } bzw Liste 3 = { 2, 3 } (ich bin mir nicht ganz sicher, was du mit "doppelte löschen" nun tatsächlich meinst.
Wenn du aber wirklich die Elemente aus Liste 1 haben möchtest, die in Liste 2 nicht vorkommen, dann müsste das richtige Ergenis ja lauten: Liste 3 = { 2 }
Ich hab es gerade schon zu einer ähnlichen Frage geschrieben: Wenn es für dich kein konzeptueller Overkill ist, könntest du dich an Streams (auf List, Set, Map u.s.w. möglich) versuchen:
Du könntest dich auch an Streams wagen. Eine ArrayList scheinst du ja schon zu haben...
Habe gerade mal nach "filter duplicates in ArrayList stream" gegooglet und gleich ein paar interessante Links gefunden #distinct scheint die Methode der Wahl zu sein, vorausgesetzt, du hast eine ordentliche #hashcode Methode erstellt (oder erstellen lassen).
hallo zusammen, ich habe es gestern nach langem tüftel endlich geschaft.
habe es mit zwei for Schleifen wie von stg vorgeschlagen hinbekommen. danke dir.
Habe noch ne andere Frage die aber evtl nicht hier rein Gehört:
Wenn ich mir eine ArrayList per mail schicke, bekomme ich den Listeninhalt in Eckigen Klammer dargestellt.
Kann man die Klammer ausblenden??
Ich habe das Programm nun fertig gestellt und es läuft unter Eclipse auch.
Nun habe ich meinen Code als Jar File Exportiert und diesen dann auf ein Rapsberry geladen.
Beim Ausführen von der Konsole aus kommt aber folgende Fehlermeldung:
pi@raspberrypi:~/Desktop $ java Timer_Lesen_Senden.jar
Fehler: Hauptklasse Timer_Lesen_Senden.jar konnte nicht gefunden oder geladen werden
pi@raspberrypi:~/Desktop $ java -jar Timer_Lesen_Senden.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingException
at Timer_Lesen_Senden.SplitCodeMitVariablen.main(SplitCodeMitVariablen.java:29)
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
^Cpi@raspberrypi:~/Desktop ^C
Vermutlich ist die JavaMail API unter deiner Java Runtime auf dem Raspberry nicht vorhanden. Im Zweifel liefer sie einfach mit deinem jar zusammen mit aus.
Versuche es mal mit "java -jar Timer_Lesen_Senden.jar". Du hast die JVM angewiesen ein Klasse "Timer_Lesen_Senden.jar" zu starten. Das ist natürlich Quark.
pi@raspberrypi:~/Desktop $ java -jar Timer_Lesen_Senden.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingException
at Timer_Lesen_Senden.SplitCodeMitVariablen.main(SplitCodeMitVariablen.java:29)
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
Dann wirst du wohl beim Erstellen des jar-Files nicht die externen Abhängigkeiten mit verpackt haben.
Wenn du das mit Eclipse machst:
Export > Runnable JAR file > [Launch Config auswählen, Export Destination wählen, Library Handling (z.B. "Extract required...")] > Finish