Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht

Darknet

Bekanntes Mitglied
Ich möchte zwei Arrylisten verleichen ob da exakt die gleichen Werte drinnen stehen.

Hierzu habe ich fogende unktion gebastelt:

Code:
private ArrayList<container> duplikateLoeschen(ArrayList<container> container)
{
ArrayList<container> temp = new ArrayList<container>();
     
for(container conta : container)
        {boolean registriert = false;
           /*
            for(String bSpiel : conta.getpoints())
            {*/ boolean enthalten = false;
               for(container contb : container)
               { /*
                    for(String aSpiel : contb.getpoints())
                     {*/ // System.out.println("Schleife");
                if(contb.getpoints().equals(conta.getpoints()))
                {//System.out.println("if");
                    enthalten = true;
                }
            }
            if(enthalten)
            {registriert = true;System.out.println("temp");
            if(temp.size()== 0) {
               temp.add(conta);
            }
            else {
            for(container lokal : temp)
           {
                if(lokal.getpoints().equals(conta.getpoints()))
                 {
                    System.out.println("String");
                 }
                else {
                    temp.add(conta);
                    System.out.println("else");
                    break;
                }
             
           }}
            }
        }
       return temp;
}

Dies Funktioniert aber nicht da sie immer noch doppelte Einträge zurück gibt eventuell das equals?
 

Robat

Top Contributor
Wenn du eine Liste haben willst, die keine Duplikate enthält dann nimm doch direkt ein Set?

An sich scheint dein Algorithmus aber richtig zu sein - wenn doch recht umständlich.
Hast du denn die equals-Methode der Klasse (was auch immer getpoints() zurückgibt) nach deinen Vorstellungen überschrieben?

Duplikate entfernen, kannst du übrigens wunderbar mit der Stream-API in Java
Java:
List<Integer> list = List.of(1, 1, 2, 3, 4, 5, 6);
List<Integer> distinctList = list.stream().distinct().collect(Collectors.toList());
System.out.println(distinctList);
 

Darknet

Bekanntes Mitglied
Was meinst du mit Set? getpoints() gibt ein ArrayList Typ String zurück.
Irgendwie funktioniert das bei mir aber nicht erhalte alles doppelt und dreiach auch nach der unktion Duplikate entffernen
 
Zuletzt bearbeitet:

Darknet

Bekanntes Mitglied
Kannst du mir noch sagen wie ich das am besten einbaue

Ich nutze eine Arraylist wie wandele ich die in Set um?
Set<container> temp = (Set<container>) new ArrayList<container>();
 

httpdigest

Top Contributor
Um die gute Antwort von @Robat mit den Streams nochmal aufzugreifen:
Java:
private static <T> List<T> duplikateLoeschen(Collection<T> container) {
  return container.stream().distinct().collect(java.util.stream.Collectors.toList());
}

Plus: Bei Rückgabewerten und Parametern von Methoden, solltest du nach Möglichkeit nicht mit ganz konkreten Typen wie ArrayList arbeiten, sondern immer mit dem minimalsten Interface/Obertyp, den du verwenden kannst. Also in diesem Fall mit Collection of T als Parameter und List of T als Rückgabewert. Als Argument des Methodenaufrufes kannst du dann selbstverständlich eine konkrete ArrayList of anything reingeben, weil eine ArrayList ja auch eine Collection ist. Aber den Rückgabewert kannst du nicht mehr direkt einer ArrayList Variablen/Feld zuweisen, sondern musst dafür höchstens List verwenden. Du solltest ArrayList nur bei Instanziierungen verwenden; also an den Stellen, wo du eine ArrayList erzeugst, z.B. mit `new ArrayList<...>()`.
 

looparda

Top Contributor
Kannst du mir noch sagen wie ich das am besten einbaue
Ich will dir einmal erklären wie du vorgehen kannst, um es selbst herauszufinden.
@Robat hat ein Set vorgeschlagen. Im Javadoc zu Set siehst du, dass es sich um ein Interface handelt. Dieses kannst du ohne Implementierung nicht benutzen - unter "All Known Implementing Classes:" siehst du Klassen, die das Interface erfüllen. Geeignet scheint die Implementierung als HashSet. Unter der Überschrift Constructors siehst du alle Konstruktoren u.a.:
  • HashSet() Constructs a new, empty set; the backing HashMap instance has default initial capacity (16) and load factor (0.75).
  • HashSet(Collection<? extends E> c) Constructs a new set containing the elements in the specified collection.
Der zweite Konstruktor kann also aus einer Collection ein HashSet erstellen. Deine ArrayList ist eine Collection womit die Typen kompatibel sind.
 

Robat

Top Contributor
Noch mal zu deinem ursprünglichen Problem zurück - also warum dein Algorithmus nicht funktioniert.
Ein vorstellbarer Grund wäre, dass lokal.getpoints().equals(conta.getpoints()) nicht das macht, was du erwartest.
Wenn du sagst, dass die Methode eine ArrayList<String> zurückgibt, dann vergleichst du also 2 Listen mit dessen equals-Methode. Das Problem hierbei ist, dass 2 Listen nur dann gleich sind wenn sie die gleichen Elemente in exakt der gleichen Reihenfolge enthalten - ist das bei dir sichergestellt? Was also nicht funktionieren würde, wäre sowas:
Java:
List<String> first = List.of("Hallo", "World");
List<String> second = List.of("World", "Hallo");
System.out.println(first.equals(second)); // --> false

Egal für welchen Weg du dich entscheidest - ob Set oder mit der Stream-API .. du musst die equals - und HashCode Methode deiner Container-Klasse überschreiben, sonst wird auch das nicht funktionieren. Du musst damit definieren, wann 2 Container gleich sind - nämlich dann wenn ihre Point-Listen gleich sind. Dabei musst du wiederum auf das aufpassen, was ich oben gerade erläutert habe. 2 Liste sollen bei dir scheinbar auch dann gleich sein, wenn sie die gleichen Elemente, aber in unterschiedlicher Reihenfolge enthalten.
 

Trjavnamen

Bekanntes Mitglied
aLS DUMMER Anfänger sehe ich keine bekannte Variablendeklaration. Hast du eine ArrayList[][] (zweidimensional) oder eine ArrayList [] (eindimensional) angelegt. UNd für jedes Element eine Umwandlung in einzelnes Objekt erstellt.Welche du dann verglichen hast bzw. anhand einer Methode jeweils den neuen wert zuordnen soll wenn eine Aktion ausgeführt wird?
 

Trjavnamen

Bekanntes Mitglied
Am Anfang? Oder hast du die Elemente: aus einer eindimensionalen Datei(Tabelle spalte1 oderTrennzeichen z.B. bei .csv durch Enter) generiert ,oder aus einer zweidimensional Datei (Tabelle Spalte Zeile ,oder z.B. bei .csv Spalte(;)Zeile(Enter) oder ist das eine Spiegelung eines StringBuilders?Kurz woher kommen die Daten ursprünglich?
 

Trjavnamen

Bekanntes Mitglied
Und damit bekommt die Antwort von Robat einen Sinn.Alle Elemente in einer ArrayList zuordnen.Aus jedem ArrayList Element ein Objekt machen. Objekt durch Methode neuen Wert zuweisen. Und alle Objekte wieder als ArrayList abspeichern. Viel Schreibarbeit . Bei einer .csv Datei würde das eine weiteres Listfenster sein welches an der letzten Position dann den Wert für Registriert enhält. Zeile = Zeile
 

Robat

Top Contributor
Wo die Daten herkommen spielt doch für seine Frage gar keine Rolle. Er wollte einfach nur wissen, wie man Duplikate aus einer Liste löschen kann bzw diese vermeiden kann.
 

Darknet

Bekanntes Mitglied
Die Daten kommen aus einer Klasse container:

Jeder Eintrag hat sein eigenes Objekt vielleicht hängt es wirklich da drann die Hauptklasse hat eine Liste von Container Elementen, die jeweils eine Array list mit Points enthält. Ich will eigentlich nur jedes Container Element löschen was in Points die gleichen werte hat so das keine Dubletten entstehen

Code:
import java.util.ArrayList;
import java.util.List;
import org.jsoup.select.Elements;
public class container {
    private String score;
    private String classname;
    private String classid;
    ArrayList<String> points = new ArrayList<String>();
 
 
    public container() {
   
    }
 
    public void setpoints(String point){
        this.points.add(point);
   
    }
    public void setscore(String score){
        this.score = score.trim();
   
    }
    public void setclassname(String classes){
        this.classname = classes;
        //System.out.println("Klasse:"+this.classes);
    }
    public String getclassname(){
        return this.classname;
    }
    public void setclassid(String classes){
        this.classid = classes;
        //System.out.println("Klasse:"+this.classes);
    }
    public String getclassid(){
        return this.classid;
    }
    public String getscore(){
        return this.score;
    }
    public ArrayList<String> getpoints(){
 
        return points;
    }
 
 
}

Habe das jetzt so umgeschrieben ohne Erfolg:
Code:
duplikateLoeschen(container);
  
}
private void duplikateLoeschen(Collection<container> container)
{
List<container> temp =  new ArrayList<>();
container. stream().distinct().collect(java.util.stream.Collectors.toList());
System.out.println(container);
}

Ich kann jetzt auch nicht mehr auf die Futionder der klasse container zugreifen
 
Zuletzt bearbeitet:

looparda

Top Contributor
In duplikateLoeschen machst den Kram mit dem Stream, distinct und collect Aber ignorierst den return-Wert des Statements. Somit hat die Funktion keinen zweck als die Liste auszugeben.
 

Trjavnamen

Bekanntes Mitglied
Gehe ich richtig davon aus das das ArrayList zweidimensional ist[Y][X]. Denn eine lange liste kann man nur Auf eine Regel sortieren. Was hindert dich daran aus zwei ArryList eine neue ArrayList zu erstellen. Dein FXML um entsprechende Felder zu erweitern um dann die Abfragen zu formulieren?
 

Darknet

Bekanntes Mitglied
In duplikateLoeschen machst den Kram mit dem Stream, distinct und collect Aber ignorierst den return-Wert des Statements. Somit hat die Funktion keinen zweck als die Liste auszugeben.
System.out.println(container);
Diese Liste hat aber noch doppelte Einträge die sollen doch denke ich draußen sein.

Oder falls ich das falsch verstanden habe kannst du das nochmal für dummies erklären?
 

Darknet

Bekanntes Mitglied
Ich glaube jetzt habe ich etwas verstanden korrigiert mich falls ich falsch liege:
Code:
container. stream().distinct().collect(java.util.stream.Collectors.toList());
System.out.println(container);

Diese Funktion überprüft ob die komplette Container (Klasse)gleich ist.

Dieser ist natürlich nicht gleich hier und da sind andere Werte gespeichert.

Ich will ja nicht das ganze Objekt vergleichen sonder im Objekt nur eine bestimmte Arrayliste in den anderen Variablen steht durchaus etwas anderes.
 

Trjavnamen

Bekanntes Mitglied
ps setze breakpoints neben den beiden Variablen. wechsle in den debugview und copiere mal die Werte die in xVariable (Alle aufdecken)angezeigt werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
R Buttons ohne Funktion Java Basics - Anfänger-Themen 2
I Generische Funktion Java Basics - Anfänger-Themen 3
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
M toDouble Funktion Java Basics - Anfänger-Themen 3
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
X Ackermannsche Funktion Java Basics - Anfänger-Themen 32
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
P Dezimal zu Hexadezimalzahl Funktion Java Basics - Anfänger-Themen 5
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
D Funktion nur 1 Rueckgabewert Java Basics - Anfänger-Themen 9
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
R Ackermann Funktion Java Basics - Anfänger-Themen 2
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
E Contain-funktion überlisten Java Basics - Anfänger-Themen 4
J Division ohne Arithmetische Funktion Java Basics - Anfänger-Themen 2
S Funktion in Klasse auslagern Java Basics - Anfänger-Themen 4
J Problem mit Boolean bei Funktion! Java Basics - Anfänger-Themen 5
S Gibt es eine Funktion, die gewissermaßen eine Reihe von instanceOf() vereinheitlicht? Java Basics - Anfänger-Themen 19
D Nullstellen einer Funktion 3. Grades mit Horner Schema Java Basics - Anfänger-Themen 6
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
D Funktion gibt Dimension zurück Java Basics - Anfänger-Themen 11
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
B Zugriffe in einer Klasse / Funktion Java Basics - Anfänger-Themen 9
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
J Array innerhalb einer Funktion mehrfach iniatilisieren Java Basics - Anfänger-Themen 4
T Lambda-Funktion bei Binärbäumen Java Basics - Anfänger-Themen 13
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
B OOP Wie benutze ich die Main Funktion richtig? Java Basics - Anfänger-Themen 10
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
S Threads run - Funktion wird nur einmal ausgeführt. Java Basics - Anfänger-Themen 8
B Anwender soll mathematische Funktion eingeben können, Einfachster Fnktionsplotter Java Basics - Anfänger-Themen 4
R If Funktion funktioniert nicht :P Java Basics - Anfänger-Themen 3
H Funktion in Hintergrund und Vordergrund ausführen Java Basics - Anfänger-Themen 11
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
S Funktion eines Stacks Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
T Klassen Funktion in einem Funktionsaufruf definieren Java Basics - Anfänger-Themen 3
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
X Eval-Funktion mit Variable Java Basics - Anfänger-Themen 2
T Screenreader Funktion Java Basics - Anfänger-Themen 2
S Wertetabelle einer Funktion f : R -> R Java Basics - Anfänger-Themen 1
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
shiroX OOP Java Funktion implementieren Java Basics - Anfänger-Themen 3
O Debug-Funktion mit Slick - Kleines Problem Java Basics - Anfänger-Themen 5
F Funktion immer zur vollen Stunde? Java Basics - Anfänger-Themen 3
S ResultSet close() in funktion nich möglich. Java Basics - Anfänger-Themen 8
C Meine erste Funktion Java Basics - Anfänger-Themen 12
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
G OOP Aus Objekt auf Funktion der erzeuger Klasse zugreifen? Java Basics - Anfänger-Themen 11
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
M Interface als Konstruktorparameter nutzen, um Funktion zu plotten Java Basics - Anfänger-Themen 14
NR_EIGHT Benutzereingabe in Funktion verpacken Java Basics - Anfänger-Themen 4
J Funktion definieren und ausfuehren Java Basics - Anfänger-Themen 27
D Loop Funktion für Robot Klasse Java Basics - Anfänger-Themen 5
N mathematische Funktion Java Basics - Anfänger-Themen 29
R Programm verstehen, Funktion Java Basics - Anfänger-Themen 4
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3
O Nicht Standard Form boolesche Funktion in Standard Form parsen Java Basics - Anfänger-Themen 3
F Sleep Funktion Java Basics - Anfänger-Themen 12
S Euklid Funktion Java Basics - Anfänger-Themen 8
H Funktion mit Argumenten Java Basics - Anfänger-Themen 5
Q Random Funktion JButtons Java Basics - Anfänger-Themen 6
O Probleme mit der repaint-Funktion Java Basics - Anfänger-Themen 6
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
S Parameterübergabe - identische Funktionen, aber falsche Funktion Java Basics - Anfänger-Themen 5
C Probleme mit replaceAll Funktion Java Basics - Anfänger-Themen 9
S Vector mit beliebigen Klassen an Funktion übergeben Java Basics - Anfänger-Themen 20
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben