Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Java] Typisierte Liste sortieren (https://www.delphipraxis.net/165984-%5Bjava%5D-typisierte-liste-sortieren.html)

Luckie 24. Jan 2012 22:56

[Java] Typisierte Liste sortieren
 
Ich habe eine Klasse Auto:
Code:
package de.Auto;

public class Auto implements Comparable<Auto> {

   private String marke;
   private String baujahr;
   private String farbe;

   public String getMarke() {
      return marke;
   }

   public void setMarke(String marke) {
      this.marke = marke;
   }

   public String getBaujahr() {
      return baujahr;
   }

   public void setBaujahr(String baujahr) {
      this.baujahr = baujahr;
   }

   public String getFarbe() {
      return farbe;
   }

   public void setFarbe(String farbe) {
      this.farbe = farbe;
   }

   public String toString() {
      return this.marke + ", " + this.farbe + ", " + this.baujahr;
   }

   @Override
   public int compareTo(Auto auto) {
      if (auto.toString() == null && this.toString() == null) {
         return 0;
      }
      if (this.toString() == null) {
         return 1;
      }
      if (auto.toString() == null) {
         return -1;
      }
      return 0;
   }
}
Und eine Klasse AutoListe:
Code:
package de.Auto;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class AutoListe extends ArrayList<Auto> {

   private static final long serialVersionUID = 1L;
   private List<Auto> autoListe;

   public AutoListe() {
      autoListe = new ArrayList<Auto>();
   }

   public void sortByToString() {
      Collections.sort(autoListe, newAscAutoComparator());
   }

   protected static Comparator<Auto> newAscAutoComparator() {
      return new Comparator<Auto>() {
         @Override
         public int compare(Auto arg0, Auto arg1) {
            return arg0.toString().compareTo(arg1.toString());
         };
      };
   }
}
Allerdings funktioniert das Sortieren nicht. Er springt gar nicht erst in die Methode public int compare() rein, wenn ich die Methode sortByToString() aufrufe. Was mache ich da noch falsch?

BUG 24. Jan 2012 23:50

AW: [Java] Typisierte Liste sortieren
 
Bist du sicher, dass du sort auf der richtigen Liste aufrufst?
Du leitest einmal die AutoListe von ArrayList<Auto> ab, hast dann aber noch eine weitere ArrayList<Auto> als Member.

So ins Blaue hinein (weiß ja nicht, wie du die Liste verwenden willst):

Code:
public class AutoListe extends ArrayList<Auto> {

   private static final long serialVersionUID = 1L;
   // private List<Auto> autoListe;

   public AutoListe() {
      // autoListe = new ArrayList<Auto>();
   }

   public void sortByToString() {
      // Collections.sort(autoListe, newAscAutoComparator());
      Collections.sort(this, newAscAutoComparator());
   }

   protected static Comparator<Auto> newAscAutoComparator() {
      return new Comparator<Auto>() {
         @Override
         public int compare(Auto arg0, Auto arg1) {
            return arg0.toString().compareTo(arg1.toString());
         };
      };
   }
}

Luckie 25. Jan 2012 00:20

AW: [Java] Typisierte Liste sortieren
 
Ah. OK. Ich darf keine interne Liste deklarieren. Das heißt die Liste ist schon typisiert mit
Code:
public class AutoListe extends ArrayList<Auto>
Dank dir.

Coffeecoder 25. Jan 2012 09:18

AW: [Java] Typisierte Liste sortieren
 
Hallo,
Mir ist aufgefallen, dass du keinen Konstruktor in der Klasse Auto hast. In diesem Fall erbt man den Konstruktor von der Oberklasse.
Code:
...

public Auto() {
  this("Audi","2008","Rot");
}
      
public Auto(String marke, String baujahr, String farbe){
  this.marke = marke;
  this.baujahr = baujahr;
  this.farbe = farbe;
}

...
War das Absicht?

Luckie 25. Jan 2012 09:46

AW: [Java] Typisierte Liste sortieren
 
Ich brauchte keinen Konstruktor. Als ich noch die überflüssige interne Liste hatte, hatte ich einen, um die interne Liste zu erstellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz