Comparable bzw Comparator

Hallo!

wie kann ich mehrere Attribute einer Klasse (die Comparable implementiert) miteinander vergleichen?
beispielsweise möchte ich von 2 Objekten jeweils dieselben attribute gewicht und anschließend am besten über dieselbe methode die attribute größe miteinander vergleichen.
(Wie) geht das?
Ich müsste momentan für jedes Attribut das vergleichbar sein soll eine Methode schreiben.
Da muss es doch einen besseren weg geben, oder?

zum Code:
Ich habe eine Klasse Animal erstellt, die als attribute name, alter und größe hat. Über den Konstruktor werden dann die entsprechenden infos initialisiert.
Die Methode compareTo(Animal o) soll nun ein objekt vergleichen können.


Java:
public class Animal implements Comparable<Animal> {
    private String _name;
    private double _gewicht;
    private int _alter;

    public Animal(String name, double gewicht, int alter) {
        _name = name;
        _gewicht = gewicht;
        _alter = alter;
    }

    @Override
    public int compareTo(Animal o) {
        return Double.compare(this._gewicht, o._gewicht);
    }

    public int compareAlter(Animal o) {
        return Integer.compare(this._alter, o._alter);
    }
   
   

    public String getName() {return _name;    }
    public double getGewicht() {return _gewicht;}
    public int getAlter() {return _alter;}
}

Java:
public class Main {
    public static void main(String[] args) {
        Animal dog = new Animal("Dog", 1.99, 9);        //name, gewicht, alter
        Animal cat = new Animal("Cat", 3.45, 10);
        Animal lama = new Animal("LAma", 120.45, 18);
   
        System.out.println(dog.compareTo(cat));
        System.out.println(dog.compareAlter(cat));

        // so fände ich es besser, ich weiß jedoch nicht wie das 
         //implementiert werden soll.:
             // dog.alter.compareTo(cat.alter);
    }
}

Ich danke euch für eure hilfe
Lg
 

mrBrown

Super-Moderator
Mitarbeiter
Du kannst doch in compareTo mehrere Werte vergleichen, was spricht dagegen?

ZB erst Alter, wenn das gleich ist Gewicht, und wenn das auch den Namen.


Ein Blick in Comparator ist vllt auch ganz nützlich ;)
 
ja, kann mann. jedoch will ich das ganze dynamisch haben, nicht statisch. Ich will einfach mehrere variablen derselben klasse bezüglich größe, alter, gewicht, noten, finanzstatus usw vergleichen können, ohne für genau die verglichenen variablen eine extra zeile code schreiben zu müssen.
 

mrBrown

Super-Moderator
Mitarbeiter
Es gäbe Wege, aber nein, ich werde nicht sagen welche, dazu sind sie zu ungeeignet, grad für Anfänger.
Schreib explizit hin, was du vergleichst, das ist der schöne Weg ;)

Und wie gesagt: Comparator.
 
comparator macht doch in etwa dasselbe wie Comparable?
@mrBrown: die methode compare ist nun so implementiert wie du es sagtest. was kann ich besser machen?

zusatz:
es können nur Animals auf immer dieselbe art verglichen werden und das ausschließlich in der Reihenfolge name, alter, gewicht.

Wenn ich also 10 attribute hätte und nach allen möglichkeiten sortieren möchte, müsste ich die compareMEthode 10fakultät mal schreiben. das wäre dann 3628800 mal bis ich alle möglichen kombiinationen durch hätte.


Code:
public class Animal implements Comparator<Animal> {
    private String _name;
    private double _gewicht;
    private int _alter;

    public Animal(String name, double gewicht, int alter) {
        _name = name;
        _gewicht = gewicht;
        _alter = alter;
    }

    @Override
    public int compare(Animal o1, Animal o2) {
            int name = o1.getName().compareTo(o2.getName());
            if(name != 0 ) return name;
           
            int alter = Integer.compare(o1.getAlter(), o2.getAlter());
            if(alter != 0) return alter;
           
            return Double.compare(o1.getGewicht(), o2.getGewicht());
        }
       

    public String getName() {return _name;    }
    public double getGewicht() {return _gewicht;}
    public int getAlter() {return _alter;}
}

public class Main {
public static void main(String[] args) {
Animal dog = new Animal("ADog", 2.0, 12); //name, gewicht, alter
Animal cat = new Animal("BDog", 2.0, 12);

System.out.println(dog.compare(dog, cat));
}
}
 

mrBrown

Super-Moderator
Mitarbeiter
es können nur Animals auf immer dieselbe art verglichen werden und das ausschließlich in der Reihenfolge name, alter, gewicht.

Wenn ich also 10 attribute hätte und nach allen möglichkeiten sortieren möchte, müsste ich die compareMEthode 10fakultät mal schreiben. das wäre dann 3628800 mal bis ich alle möglichen kombiinationen durch hätte.
Comparable ist für die natürliche Ordnung da (von der es nur eine Variante gibt), für alles andere eben Comparator ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Comparable und Comparator nicht ganz klar Java Basics - Anfänger-Themen 1
B Comparable & Comparator Java Basics - Anfänger-Themen 9
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
H Comparable und Comparator Java Basics - Anfänger-Themen 22
S Comparator / Comparable ? Java Basics - Anfänger-Themen 3
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
L Interface & Comparable Java Basics - Anfänger-Themen 15
I Generics und Comparable Java Basics - Anfänger-Themen 14
O Comparable Generic Java Basics - Anfänger-Themen 24
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
K Comparable - Objekte aus Array vergleichen und größtes auswählen Java Basics - Anfänger-Themen 1
Shizmo Frage zu Comparable Java Basics - Anfänger-Themen 4
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
N Datentypen LocalDate Generic Comparable Java Basics - Anfänger-Themen 2
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
F Comparable mit String Java Basics - Anfänger-Themen 5
F Objekte sortieren mit Comparable Java Basics - Anfänger-Themen 9
R Mehrere Interfaces(Comparable, ...) Java Basics - Anfänger-Themen 2
C Comparable Interface Java Basics - Anfänger-Themen 8
T Interface Interface Comparable Problem... Java Basics - Anfänger-Themen 2
H Interface Comparable Verständnisfrage Java Basics - Anfänger-Themen 6
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
J Probleme mit Comparable, compareTo() Java Basics - Anfänger-Themen 2
A Comparable interface Java Basics - Anfänger-Themen 26
I Interface Comparable für Server-Item-Interface Java Basics - Anfänger-Themen 12
P Comparable und Generics Java Basics - Anfänger-Themen 6
S comparable und equals Java Basics - Anfänger-Themen 7
M Frage zum Interface Comparable Java Basics - Anfänger-Themen 3
S Comparable Java Basics - Anfänger-Themen 4
S instanceof Comparable...geht nicht? Java Basics - Anfänger-Themen 20
M comparable funktion & reverse funktion Java Basics - Anfänger-Themen 8
H Mehrere Comparable Java Basics - Anfänger-Themen 4
D Comparable - Bucketsort / Radixsort? Java Basics - Anfänger-Themen 2
B Mehrere Werte mit Comparable sortieren Java Basics - Anfänger-Themen 14
S String umwandeln in Comparable Java Basics - Anfänger-Themen 6
R Comparable Interface Funktionalität selbst programmieren? Java Basics - Anfänger-Themen 3
A Interface Comparable Java Basics - Anfänger-Themen 2
J Comparable Java Basics - Anfänger-Themen 9
frau-u Wie vergleicht Comparable Java Basics - Anfänger-Themen 2
M Comparable - Bedingung erzwingen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
M Comparator Java Basics - Anfänger-Themen 25
M Comparator Java Basics - Anfänger-Themen 4
berserkerdq2 Wie lege ich ein Attribut comparator an? Java Basics - Anfänger-Themen 13
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
H Comparator Fehlermeldung Java Basics - Anfänger-Themen 5
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
A Priority Queue / Comparator Java Basics - Anfänger-Themen 6
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
J Comparator Java Basics - Anfänger-Themen 21
A Comparator Java Basics - Anfänger-Themen 4
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
V Comparator Java Basics - Anfänger-Themen 16
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
C Comparator und private Variablen Java Basics - Anfänger-Themen 7
S Comparator für Generiks Java Basics - Anfänger-Themen 6
Helgon Interface Comparator wird nicht instanziert Java Basics - Anfänger-Themen 3
C Comparator mit Double Werten? Java Basics - Anfänger-Themen 12
E Comparator sortiert falsch... Java Basics - Anfänger-Themen 2
M Comparator Java Basics - Anfänger-Themen 7
B OOP Logikhilfe zum Comparator 2 Java Basics - Anfänger-Themen 12
B OOP Logikhilfe zum Comparator Java Basics - Anfänger-Themen 11
G Comparator Problem Java Basics - Anfänger-Themen 5
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
B OOP Comparator - Sortierung "optisch" Darstellen Java Basics - Anfänger-Themen 17
A JTable sortieren mit einem Comparator Java Basics - Anfänger-Themen 2
G Objekte mit dem Attribut title mit Comparator sortieren Java Basics - Anfänger-Themen 5
P unchecked conversion to conform to Comparator Java Basics - Anfänger-Themen 3
G Comparator- methode compare exception werfen Java Basics - Anfänger-Themen 4
B interface Comparator Java Basics - Anfänger-Themen 4
M Hilfe bei der Erstellung der Comparator Klasse Java Basics - Anfänger-Themen 10
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
G Sortieren ohne Comparator? Java Basics - Anfänger-Themen 4
G Comparator Java Basics - Anfänger-Themen 10
S Frage zu Comparator Java Basics - Anfänger-Themen 3
G ArrayList und Comparator Java Basics - Anfänger-Themen 6
M Comparator - Sortierkriterium Java Basics - Anfänger-Themen 11
L Comparator Java Basics - Anfänger-Themen 5
T Problem mit Comparator! Java Basics - Anfänger-Themen 7
C Anstatt Spalte, Zeile mit Comparator sortieren . Java Basics - Anfänger-Themen 5
B Liste sortieren mit Comparator Java Basics - Anfänger-Themen 2
S JTable mit Comparator sortieren, die Frage ist wo? Java Basics - Anfänger-Themen 4
W Comparator Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben