Suchfunktion in einer Liste

egokyniker

Mitglied
Hallo Leute,

Ich habe eine Hashmap Liste, in dieser Liste befinden sich Bauteile, die Duplikate haben. Diese Duplicate , manchmal sind es nur zwei oder auch drei, die möchte ich miteinander verschmelzen, also ein Bauteil machen.
Wie ich die miteinander verschmelze weiß ich.
Aber wie finde ich in dieser Liste die Duplicate , die zusammengehören?
Also Bauteil 1 kommt zum Beispiel dreimal vor. Bauteil 2 kommt zweimal vor usw. Dann muss ich eigentliche, dass erste auswählen und als fix setzten und zweite und dritte Komponenten mit erster mergen.
Ich weiß auch nicht, um welche Bauteile es sich handelt.

Habt ihr eine Idee wie ich die Duplicate finde? Sollte man für alle eine extra Array List anlegen ?

Vielen Dank und viele Grüße
 

KonradN

Super-Moderator
Mitarbeiter
Erst einmal die große Frage: Was hast Du? Eine Map oder eine Liste? Wenn es eine Map ist: Wie ist diese genau aufgebaut?

Wenn Du eine Map hast und die Bauteile als Key genommen wurden: Wie sieht die Klasse Bauteil aus? Wenn da hashcode und equals richtig implementiert worden ist, dann kann es keine Dopplungen im Key geben.

Wenn man eine Liste hat und Doppelte finden will, dann kann man ein Set anlegen und dann die Liste durchgehen und für jedes Element prüfen:
  • ist das Element bereits im Set? --> Doppelt
  • sonst: Element in Set packen

Das wäre ein möglicher Algorithmus.

Wenn es gewisse Vorgaben gibt, dann kann man ggf. auch beim füllen der Liste / Map ansetzen. So könnte man beim füllen der Datenstruktur diese Prüfung z.B. direkt machen. Statt einer List könnte man auch ein Set nutzen (HashSet, LinkedHashSet, TreeSet, ...)
 

White_Fox

Top Contributor
Reine Spekulation, aber irgendwie klingt das nach vermurkster Datensammlung.

Weniger mühselig wäre es – natürlich nur sofern überhaupt möglich – dafür zu sorgen, daß Duplikate gar nicht erst in der "Hashmap Liste" landen, vielleicht ist das ein Option?
 

egokyniker

Mitglied
Hallo
Genau die Duplicate brauche ich, also die Mehrfachen. Denn ich muss genau mit denen arbeiten und diese zusammenführen

ich habe eine rekursive Funktione geschrieben, durch die ich an alle Elemente aus den Packages rankommen und nun eine foreach Schleife , die mir alle Bauteile wiedergibt. Kann jetzt irgendeine Liste nehmen.

Java:
for(MBauteile mBauteil : mBauteilPackage.getBauteileElemente())

Aber welche? Jedes Bauteil hat eine unique ID. Deswegen habe ich an eine HashMap gedacht.

UseCase ist folgender:
In dieser Liste sind unter anderem Bauteil X1 und X2 und X3. Oder Y1und Y2 oder auch Z1 und Z2 und Z3. Und jedes hat eine unique ID. Aber aus diesen 3 bzw. 2 möchte ich ein Bauteil machen. Ineinader überführen.

Aber wie kann ich diese selektieren ?
 

KonradN

Super-Moderator
Mitarbeiter
Woran machst Du denn fest, dass X1, X2 und X3 das gleiche Bauteil sind? Gibt es etwas, das gleich ist?

Und wenn Du die Liste erst aufbaust: Wieso verhinderst Du da nicht schon, dass doppelte Elemente eingefügt werden?

Ich sehe immer noch nicht wirklich die Problematik. Kannst Du uns mehr Details geben:
  • Wie baust du die bisherige Liste auf.
  • Was für Werte speicherst Du und was muss gleich sein, damit zwei Bauteile gleich sind?
  • Was willst Du genau machen, wenn Du zwei gleiche Bauteile gefunden hast?
 

KonradN

Super-Moderator
Mitarbeiter
Also das hilft noch nicht wirklich viel weiter. Das ist ein reines raten.

Wenn die Namen der Schlüssel sind, dann kann eine Map genutzt werden, der halt zu dem Namen irgendwelche Details enthält. Aber ohne Details zu kennen, kann man nicht sagen, was eine sinnvolle Vorgehensweise ist, welche Map Implementation am Besten ist und was genau gespeichert wird.
 

White_Fox

Top Contributor
Die Namen der Bauteile sind gleich. Aber genau die Mehrfachen brauche ich für weitere aktionen
Also was ich bisher entnommen habe:
  1. Du hast in einer Sammlung Duplikate – warum auch immer.
  2. Du willst diese Duplikate eigentlich haben um andere Dinge zu tun. Müssen das Duplikate sein? Dasselbe Objekt mehrfach nutzen geht nicht?
  3. Du willst die Duplikate wieder zusammenlegen.
Nimm es mir nicht übel, aber wenn ich so eine merkwürdige Mehrfacharbeit habe, dann habe ich wahrscheinlich Mist gebaut.

Wie wäre es denn, wenn du die Schritte 1 und 2 tauschst: Erst läßt du deine Objekte arbeiten, und dann wirfst du sie in deine Collection...und prüfst vorher, ob sich ein passendes Objekt bereits in der Collection befindet?

Aber, um deine eigentliche Frage zu beantworten:
Java:
for(EntrySet<Boo, Foo> entry : yourHashMapListe.entrySet<Boo, Foo>()){
    Boo value = entry.value();
    
    for(EntrySet<Boo, Foo> twinCandidate : yourHashMapListe.entrySet<Boo, Foo>()){
        if(value.equals(twinCandidate) && value != twinCandidate){
            yourHashMapListe.remove(twinCandidate);
        }
    }
}

Du iterierst über deine "HashMapListe" und nimmst das erste Element raus. Mit diesem Element iterierst du nochmal über deine "HashMapListe" und prüfst für jedes verbliebene Element, ob es ein Duplikat ist und wirfst es bei Bedarf raus.

Der Algorithmus ist halt Mist, weil der Aufwand quadratisch steigt: Doppelt so lange HashMap, etwa vierfacher Arbeitsaufwand. Je nach dem wieviele Duplikate enthalten sind, aber etwas anderes fällt mir nicht ein wenn du es so machen willst, wie du sagst. Daher das penetrante Nachfragen... ;)
 

Neumi5694

Top Contributor
So wie ich das verstanden habe, sind 2 Teile niemals "gleich", sondern "ähnlich". Zumindest die UniqueID des Teils unterscheidet sich jedesmal.
Erst mal müsste man bestimmen, wann 2 Teile zusammengefasst werden können und wie das passiert. Begriffe wie "verschmelzen" verheißen nichts Gutes, das klingt nach Wünsch-Dir-Was.

Falls ich mich aber hier täusche und 2 Teile tatsächlich inklusive ID gleich sind:
Eine Map ist nur dann sinnvoll, wenn du über die ID auf das Teil zugreifen willst. Dann gibt's von Haus aus auch keine Duplikate.
Eine Liste ist sinnvoll, wenn jedes Teil öfter vorkommen darf
Ein Set verwendest du dann, wenn jedes Teil nur einmal vorkommen darf. Überschreibe am die Equals-Methode der Teile, damit auch 2 verschiedene Teile mit gleichen Daten als 'gleich' gelten.
 

egokyniker

Mitglied
Hallo Leute
Das ich mehrere Bauteile aber mit unterschiedlicher unique ID habe, liegt an dem Tool mit ich arbeiten. Also zum Beispiel :ein Bauteil 1 ist in der Liste dreimal vorhanden (unterschiedlicher ID) und mit jeweils Stecker A, Stecker B und Stecker C. Aber eigentlich ist es ein Bauteil mit drei Steckern A, B, C. Die Stecker sind Kindsklassen der Objekte Bauteil. Also das Import Funktion meines Tools kann diese eine Bauteil als eins mit drei Steckern importieren , sondern macht daraus drei Bauteile mit jeweils einem Stecker.
Ich möchte die Stecker der anderen beiden zu der ersten hinzufügen und diejenigen, die dann keinen Stecker mehr haben löschen. Dann bekomme ich ein Bauteil mit drei Steckern, anstatt drei Bauteile mit jeweils einem Stecker.
Ich habe gedacht, ich könnte BruteForce nehmen, komme aber nicht weiter. Denn die Anzahl der Duplicate ist unterschiedlich. Bauteil 1 könnte dreimal vorkommen, während Bauteil2 zweimal vorkommt. Leider ist es so, dass das Tool je nach Anzahl der Stecker Duplikate erstellt, was aber falsch ist und ich korrigieren muss. Leider kann ich das nicht im Tool, sondern muss ein Code dafür schreiben. Welceh Liste ich nehme, kann ich mir aber aussuchen.


Java:
     HashMap<String, Bauteile> bauteileList = new HashMap<>();
  //LinkedList<String> bauteileList = new LinkedList<>();
  //TreeMap<String, Bauteile> bauteileList = new TreeMap<>();
  HashSet<Bauteile> duplicateSet = new HashSet<>();
  ArrayList<String> tobeMergedList = new ArrayList<>();

  public void recursiveMergeBauteile(SubBauteilePackage subBauteilePackage) {
    BauteilePackage bauteilePackage = (BauteilePackage) subBauteilePackage;

    for (Bauteile bauTeile : bauteilePackage.getBauteile()) {
      bauteileList.put(bauTeile.getID(), bauTeile);
      //bauteileList.add(bauTeile.getName());
      //printInfoText("Name " + bauTeile.getName());

      for (int i = 0; i <= bauteileList.size(); i++) {
        for (int j = 0; j <= bauteileList.size(); j++) {


        }

      }
 

Neumi5694

Top Contributor
Kleine Optimierung vorweg: Du musst nicht jedes mit jedem vergleichen, sondern jeweils nur mit den Nachfolgern, bzw. Vorgängern (je nachdem, in welche Richtung du arbeitest). Falls i und j ein gleiches Bauteil beinhalten, dann j und i auch. Außerdem dürfen die Werte nie gleich sein.

Woran erkennst du eigentlich , dass 2 Bauteile gleich sind? Aktuell hast du nur beschrieben, worin sie sich unterscheiden (ID, Stecker).

Grundsätzlich passt das, was du vorhast, schon. Aber du hast dich da mit den Indizes vertan und es dir zu kompliziert gemacht.
Hier ein etwas anderer Ansatz.
1. von hinten nach vorne arbeiten (exklusive dem letzten Element)
2. nur mit nachfolgenden vergleichen
Daraus ergibt sich, dass das Bauteil (i) höchstens mit einem einzigen Bauteil j>i zusammengefasst werden kann.
So kann man sich schrittweise nach vorne arbeiten und muss sich keine Gedanken über verschobene Indizes machen.
Java:
for (int i = bauteileList.size()-2; i >=0; i--) {
    var bI = bauteil.get(i);
    for (int j = i+1; j < bauteileList.size(); j++) { //wäre das break nicht, würde ich auch hier von hinten nach vorne arbeiten.
        var bJ = bauteil.get(j);
        if (kannZusammenfassen(bI, bJ)) {
            bI.addAlleStecker(bJ.getAlleStecker());
            bauteileList.remove(j);
            break;
        }
    }
}

ps: Eine Map als "Liste" zu benennen, ist bestenfalls verwirrend.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Wenn die Reihenfolge nicht wichtig ist und die Identifizierung gleicher Bauteile über den Namen erfolgt, dann kannst Du
1. Die Liste nach Bauteilnamen sortieren - damit sind die gleichen Bauteile nacheinander.
2. Du gehst die Liste durch und merkst Dir den Vorgänger bzw. den Namen des Vorgänger Bauteils. Das kann dann etwas in der Art sein:
Java:
List<Bauteil> bauteile = ....; // Halt die Liste der Bauteile, die Du durchgehen möchtest.
bauteile.sort(Comparator.comparing(Bauteil::getName)); // Sortierung nach Name des Bauteils.
Bauteil last = null;
List<Bauteil> resultList = new ArrayList<>();
for (Bauteil current: bauteile) {
    if (last != null && Objects.equals(last.getName(), current.getName()) {
        // current entspricht last - last kann agepasst werden!
    } else {
        // Current ist anderes Bauteil, Bauteil hinzufügen und merken.
        resultList.add(current);
        last = current;
    }
}

Was bei gleichen Elementen verändert werden muss, kann ich natürlich nicht wissen. Die Information hast Du uns nicht gegeben.
 

egokyniker

Mitglied
Hallo
Danke für eure Hilfe. Da ich mehrere und nicht nur zwei miteinander verschmelzen muss, habe ich mal die zweite Varianten genommen, aber erhalte in den entsprechenden Liste nicht das gewünschte Ergebnis.
Immer wenn die Bauteile denselben Namen (unterscheiden kann ich sie nicht am Namen , sondern an der ID) haben, dann ist es eigentlich ein Bauteil, also müssen gemergt werden, das so ungefähr:
bauteilMaster.addStecker von bauteilSlave.getStecker, weil ein Bauteil hinterher die anderen Stecker haben soll. In den Listen unten steht aber nicht das richtige. ich habe eine LinkedList genommen.

Das Object.equal(..) also if (last != null && currentBauteil.equals(last.getName(), currentBauteil.getName())) {

-->da bekomme ich die Fehlermeldung The method equals(Object) in the type RefBaseObject is not applicable for the arguments (String, String)

Danke

Java:
  LinkedList<Bauteile> bauteileList = new LinkedList<>();
  ArrayList<Bauteile> tobeMergedList = new ArrayList<>();
 List<Bauteile> notTobeMergedList = new ArrayList<>();

  public void recursiveMergeBauteile(SubBauteilePackage subBauteilePackage) {
    BauteilePackage bauteilePackage = (BauteilePackage) subBauteilePackage;
   
      for (Bauteile currentBauteil : bauteilePackage.getBauteile()) {
      bauteileList.add(currentBauteil);
          bauteileList.sort(Comparator.comparing(Bauteile::getName));

            Bauteil last = null;

             if (last != null && (last.getName() == currentBauteil.getName())) {

          tobeMergedList.add(currentBauteil);

        } else {
          notTobeMergedList.add(currentBauteil);
          last = currentBauteil;
        }
 

Neumi5694

Top Contributor
"Danke für eure Hilfe. Da ich mehrere und nicht nur zwei miteinander verschmelzen muss, habe ich mal die zweite Varianten genommen,"

Geht auch mit der ersten Variante. Das Break beendet nur die innere Schleife, nicht die äußere. Dass im "Tail" Bereich der Liste jeweils nur ein Match gefunden werden kann, kommt daher, dass beim vorigen Match das zweite Element bereits entfernt wurde.
Die Reihenfolge der Liste entspricht dann am Ende einem LinkedHashSet. Von allen Bauteilen mit gleichem Namen bleibt nur das erste übrig. Auf Umsortieren hab ich bewusst verzichtet.




Zu deinem Fehler. Schau dir mal genau an, was Kneitzel geschrieben hat und wie du's abgeändert hast. Wo in deinem Text steht "Objects"?
 
Zuletzt bearbeitet:

temi

Top Contributor
Ist das gewünschte Ergebnis immer die Konstellation
Code:
Bauteil (-name) -|- Stecker A
                 |- Stecker B
                 |- ...
                 |- Stecker n

Warum kannst du das nicht bereits beim Import korrekt anlegen?

In der Art Map<Bauteilname, Set<Stecker>>

Du musst halt vor dem Einfügen des importierten Bauteils gucken, ob es das schon gibt und entsprechend verfahren.
 
Zuletzt bearbeitet:

Neumi5694

Top Contributor
Ist das gewünschte Ergebnis immer die Konstellation
Code:
Bauteil (-name) -|- Stecker A
                 |- Stecker B
                 |- ...
                 |- Stecker n

Warum kannst du das nicht bereits beim Import korrekt anlegen?

In der Art Map<Bauteilname, Set<Stecker>>

Du musst halt vor dem Einfügen des importierten Bauteils gucken, ob es das schon gibt und entsprechend verfahren.
Ich denke schon, dass er bei einem Bauteil mehr hinterlegen will als nur den Namen (die ID des finalen Bauteils geht mit der erinfachen Map verloren, wobei die aber anscheinend eh nur Ballast ist), aber grundsätzlich würde ich auch jede Ergebnismenge sofort einsortieren.
Wenn eine Liste von Bauteilen (oder auch nur ein einziges) geliefert wird, wird geprüft, ob schon eines mit gleichem Namen existiert und der Stecker sofort hinzugefügt, ansonsten wird es als neuer Eintrag weiterverwendet.
 

temi

Top Contributor
Ich denke schon, dass er bei einem Bauteil mehr hinterlegen will als nur den Namen (die ID geht mit der erinfachen Map verloren), aber grundsätzlich würde ich auch jede Ergebnismenge sofort einsortieren.
Ja vermutlich. In der Praxis wäre das Set<Stecker> Bestandteil von Bauteil und die Map eher etwas wie: Map<Bauteilname, Bauteil> (Bauteilname ist vermutlich ein String, das ist nur zur Verdeutlichung). Dann kann er gucken, ob es den Bauteilnamen schon gibt und sich vom existierenden Bauteil die vorhandenen Stecker holen, bzw. neue hinzufügen.

Am Ende des Imports kann er die Map-Values als Liste zurückgeben.

Aber für mehr Details wissen wir zu wenig.
 

egokyniker

Mitglied
Hallo
Das Tool ist ein kommerzielles Tool und ich kann die import Funktion einer xml datei nicht manipulieren. Um den Fall zu vereinfachen, habe ich nur Stecker erwähnt, aber natürlich ist da mehr am Bauteil. Ich habe es auch mit der anderen Methode versucht, aber auch da erhalte ich eine Fehlermeldung.
Bzgl. Objects, wusste ich nicht , dass das geht, woher weiß der code , das damit die Bauteile gemeint sind ? Das habe ich nicht verstanden, dachte ich müsste das Objekt aus der foreach Schleife nehmen. Ich habe aus zumindest übernommen und erhalte hier die Meldung , "Dead Code" in der if-Schleife.

Java:
      if (last != null && Objects.equals(last.getName(), currentBauteil.getName())) {
      
        tobeMergedList.add(currentBauteil);
        printInfoText("Name " + last.getName());

        } else {
          notTobeMergedList.add(currentBauteil);
        
          last = currentBauteil;
        }


Ich habe auch die erste Variante versucht, bekomme aber die Fehlermeldung , var cannot be resolved in a Type, und bei get(i), die Fehlermeldung , "The method get(int) is undefined for the type Bauteil". Liegt das daran , dass ich eine LinkedList genommen habe? Sorry, wenn das doofe Fragen sind. Aber bin noch lange kein Profi.

Code:
      for (int i = bauteileList.size()-2; i >=0; i--) {
        var bI = currentBauteil.get(i);
        for (int j = i+1; j < bauteileList.size(); j++) {
            var bJ = currentBauteil.get(j);
            if (Objects.equals(last.getName(), currentBauteil.getName())) {
              
                bauteileList.remove(j);
                break;
            }
        }
    }

Danke
 

temi

Top Contributor
Bevor ich versuche die Import Funktion zu verstehen , ist der andere weg einfacher für mich.
Danke für den Hinweis mit den objects
Beschreibe doch bitte einfach mal was du genau machst.

Du verwendest ein "externes Tool" und programmierst "dein Tool". Das ist etwas verwirrend.

Was ist "das externe Tool"? Ist das einfach eine Java-Library zum Import von xml, die du in "deinem Tool" verwendest?

Je klarer du uns zeigen kannst, was du wie machst, desto einfacher wird es dir zu helfen. So einfach ist das...

EDIT: Du sollst jetzt nicht deinen komplette Code zeigen, aber ggf. auch auf das Wesentliche gekürzte Auszüge davon, z. B.
Java:
class Bauteil {
    private int id;
    private String name;
    // Stecker???
}

List<Bauteil> bauteile = ...
 
Zuletzt bearbeitet:

egokyniker

Mitglied
Leider geht das nicht. Die Klassen sind bereits implementiert in dem Tool. Das was ich geschickt habe , ist der ganze Code. Ich muss nur eine Metrik schreiben und kann die Klassen benutzen.
 

temi

Top Contributor
Prinzipiell kannst du trotzdem so vorgehen, wie oben beschrieben.

Du hast eine Liste mit Bauteilen und eine leere Liste.
Nimm Element für Element aus der ersten Liste und füge es in die zweite Liste ein. Vor dem Einfügen prüfst du, ob es schon enthalten ist und verfährst entsprechend.

Das ist dann halt nach dem ersten Import noch ein Zwischenschritt zum endgültigen Importergebnis.
 

egokyniker

Mitglied
Hallo
Habe ich ja versucht. Siehe oben.
Erhalte dann die Fehlermeldungen :

var cannot be resolved in a Type, und bei get(i), die Fehlermeldung , "The method get(int) is undefined for the type Bauteil".
 

KonradN

Super-Moderator
Mitarbeiter
Nur kurz zur Erläuterung. Das var ist mit Java 10 eingefügt worden und nennt sich "local variable type inference" - Beschrieben im JEP 286.

Dies erlaubt bei lokalen Variablen, die nicht nur deklariert sondern auch initialisiert werden, dass man statt dem Typ das var Keyword nutzen kann. Dann schaut der Compiler beim Übersetzen nach dem Typ und setzt diesen. Die Variable ist also weiterhin voll typisiert.

So Du noch eine alte Java Version einsetzt, dann kennt Dein Java Compiler das Keyword natürlich nicht und kann nichts damit anfangen. (Generell sollte man sich hier aber überlegen, ob man nicht auf eine aktuelle Version wecheln will. Java 11 / 17 sind LTS Versionen, wenn man darauf Wert legt und aktuell ist Java 19. Vermutlich im März nächsten Jahres wird Java 20 veröffentlicht und mit Java 21 wird im September nächsten Jahres erneut eine LTS Version erscheinen.
 

egokyniker

Mitglied
Hallo
Danke.
Jetzt bekomme ich noch die Fehlermedeldung bei get(i) und get(j):
"The method get(int) is undefined for the type Bauteil"

Muss ich da casten?


Und bei last.getName() die Fehlermdeldung : "last cannot be resolved"

Java:
      for (int i = bauteileList.size()-2; i >=0; i--) {
        Bauteil bI = currentBauteil.get(i);
        for (int j = i+1; j < bauteileList.size(); j++) {
            Bauteil bJ = currentBauteil.get(j);
            if (Objects.equals(last.getName(), currentBauteil.getName())) {
              
                bauteileList.remove(j);
                break;
            }
        }
    }
 

KonradN

Super-Moderator
Mitarbeiter
In dem Code hast Du doch gar kein "currentBauteil" - da wird einfach das Element der bauteileList abgefragt, daher sollte es immer bauteileList.get(...) heißen.

Und ebenso hast Du da auch kein last. Wenn Du Code umänderst, dann kannst Du doch nicht zwei unterschiedliche Codes so mischen. Du hast ja jetzt bI und bJ - was von den Namen her durchaus zu optimieren wäre.
 

egokyniker

Mitglied
Jetzt habe ich es kapiert. Danke.
Das mit der Klasse Objects habe ich verstanden, das ist wirklich praktisch.
Aber mir ist noch ganz klar wie die for schleifen und das break hier funktionieren. Für Erklärungen wäre ich dankbar.


Java:
LinkedList<Bauteile> bauteileList = new LinkedList<>();

public void recursiveMergeBauteile(SubBauteilePackage subBauteilePackage) {
    BauteilePackage bauteilePackage = (BauteilePackage) subBauteilePackage;
  
   for (Bauteile currentBauteil : bauteilePackage.getBauteile()) {
    bauteileList.add(currentBauteil);
    bauteileList.sort(Comparator.comparing(Bauteile::getName));
     //  Bauteil last = null;
          
     for (int i = bauteileList.size() - 2; i >= 0; i--) {
        Bauteil bI = bauteileList.get(i);

        for (int j = i + 1; j < bauteileList.size(); j++) {
          Bauteil bJ = bauteileList.get(j);

          if (Objects.equals(bI.getName(), bJ.getName())) {

            tobeMergedList.add(bI);


            break;
          }
        }
      }
 

egokyniker

Mitglied
Die liste tobeMergedList bin ich durchgegangen, und ich sehe nun zwar alle Duplicate, aber zwanzig mal. zum Bei Beispiel habe ich Bauteil S.1.4 viermal in meinem Model drin, aber in Liste 20-mal.
 

temi

Top Contributor
Der Code erscheint mir unnötig kompliziert und ich bin auch nicht sicher, dass er macht was er soll. Eigentlich weiß ich auch nicht genau, was er machen soll. Warum die Methode "recursive... " heißt ist mir schleierhaft. Da ist keine Rekursion.

Ich hab es ja schon mehrfach geschrieben. Es wäre hilfreich, wenn du mitteilen würdest, wie z. B. die Klasse Bauteil aussieht und wie die doppelten Bauteile am Ende "verschmolzen" werden sollen.

Derzeit erstellst du eine Liste, die Bauteile enthält, deren Name gleich ist.
 

KonradN

Super-Moderator
Mitarbeiter
Ja, wenn der Code nicht macht, was Du von ihm willst, dann hast Du schlicht etwas falsch gemacht.

Und ohne Details kann Dir hier niemand etwas näheres sagen!

Was mir nur auffällt: Du bastelst irgendwas am Code rum ohne zu verstehen, was der Code macht. Da dürfte es dann schlicht Zufall sein, wenn da das Richtige bei raus kommen würde.
 

egokyniker

Mitglied
Danke, ich bastele mal weiter. Aber eigentöoch versuche ich umzusetzten, was ich von euch bekomme an infos.
Wie ich das verschmelzen mach, daran arbeite ich jetzt. Wie die Klassen Bauteile genau aussieht sehe ich selbst nicht. Ich weiss aber, dass sie die methoden getStecker und addStecker hat.
Das ist mein ganzer Code, denn die Klasse Bauteile ist im tool implemtiert und ich brauche nur die metrik zu schreiben.
 

KonradN

Super-Moderator
Mitarbeiter
Es ist extrem unbefriedigend, wenn man Fragen stellt und keine wirklichen Antworten bekommt. Und Du kannst zumindest den Stand posten, den Du Dir gebastelt hast.

Und wenn Du zwei selbständige Lösungen hast, dann musst Du die nicht zusammen basteln. Jede sollte für sich funktionieren. Und der Code sollte so sein, dass Du diesen verstehst.

Und ich würde Dir raten, es immer möglichst einfach zu halten. Also z.B. nicht mit verschachtelten Schleifen arbeiten. So einen Algorithmus kann man haben, aber dann würde ich das mehr unterteilen in Methoden (und damit dann auch das Verständnis vereinfachen!).

Aber egal, wie Du vorgehen willst: Du musst den Algorithmus als erstes immer erst Formulieren um diesen dann umzusetzen. Nur so hast Du ein Verständnis, was der Code macht und kannst diesen warten / zielgerichtet verändern.

Daher in meinem Post #12 auch erst die Beschreibung ehe der Code gekommen ist.

Wenn dein Problem dann die Java Kenntnisse sind, dann kann man da helfen, da wird eine Beschreibung und Deine Umsetzung haben.
 

Neumi5694

Top Contributor
Hallo
Danke.
Jetzt bekomme ich noch die Fehlermedeldung bei get(i) und get(j):
"The method get(int) is undefined for the type Bauteil"

Muss ich da casten?
My Bad. Im Code sollte nicht bauteil.get stehen, sondern bauteileListe.get.
Hab das Ganze "blind" geschrieben.
Die Duplikatliste kannst du gerne in die Tonne treten, wenn du sofort zusammenfasst und das Duplikat dann eliminierst, wie im Beispiel.
Die wird hierfür nicht benötigt.
Wenn du eine solche Liste hast: [A,B,C,C,E,B,A,B,A]
Dann wird sie so geändert:
[A,B,C,C,E,B,A,B]
[A,B,C,C,E,B,A]
[A,B,C,E,B,A]
[A,B,C,E,A]
[A,B,C,E]

und das ganz ohne sich Duplikate zu merken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Java Suchfunktion Programmieren Java Basics - Anfänger-Themen 1
O JTable Suchfunktion Java Basics - Anfänger-Themen 2
M Suchfunktion schon bei Teilen des Wortes Java Basics - Anfänger-Themen 4
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
D OOP Suchfunktion Editor Java Basics - Anfänger-Themen 4
L Suchfunktion Java Basics - Anfänger-Themen 2
B Java Array List größe auslesen zur Suchfunktion Java Basics - Anfänger-Themen 5
G Cannot find symbol, Suchfunktion benutzt Java Basics - Anfänger-Themen 3
M imageicon aus jar (ja hab die suchfunktion schon benutzt :)) Java Basics - Anfänger-Themen 2
G Suchfunktion Java Basics - Anfänger-Themen 5
S Suchfunktion auf offline Website Java Basics - Anfänger-Themen 5
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
S Textausgabe in einer For-Schleife Java Basics - Anfänger-Themen 12
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
F wie kann ich die Position des letzten Vokals innerhalb einer Zeichenkette ermitteln? Java Basics - Anfänger-Themen 5
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
sserio Prüfziffer einer ISBN Nummer herrausfinden. Java Basics - Anfänger-Themen 14
J Benennung einer mir unbekannten Java - Ausdrucksweise Java Basics - Anfänger-Themen 5
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
P Iterieren mit einer Foreach in Lambdaschreibweise und Counter. Java Basics - Anfänger-Themen 1
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
M Wie richte ich eine Diagonale an Robotern in einer World ein? Java Basics - Anfänger-Themen 15
YAZZ BlueJ Bewegung einer Figur im Kreis Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben