sortieren von generics

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hallo,

ich habe objekte die jeweils einen datumsstempel, zeitstempel und eine angabe im wertebereich z1 -z4 hat. also z.b. die objekte:

object d: date = "20081110", time = "123000", state = "z4"
object a: date = "20081110", time = "060000", state = "z1"
object e: date = "20081106", time = "100000", state = "z1"
object c: date = "20081110", time = "123000", state = "z3"
object b: date = "20081110", time = "120000", state = "z2"
object c: date = "20081106", time = "150000", state = "z4"

die objekte liegen in keiner nenneswerten reihenfolge vor. sie können beliebig vorliegen. diese sollen sortiert werden nach state, date und time.

das ergebnis soll dann folgendes sein:

object e: date = "20081106", time = "100000", state = "z1"
object c: date = "20081106", time = "150000", state = "z4"

object a: date = "20081110", time = "060000", state = "z1"
object b: date = "20081110", time = "120000", state = "z2"
object c: date = "20081110", time = "123000", state = "z3"
object d: date = "20081110", time = "123000", state = "z4"

wie mach ich das?

danke und grüße
 

thE_29

Top Contributor
Die Klasse sollte implements Comparable sein und du überschreibst die Methode int compareTo(Object o)
Dort fragste halt ab auf deine Werte und gibst das Ergebnis zurück!

Danach kannst du mit Collections.sort(List<T> list) sortieren lassen!

Oder du machst es so

Code:
    Collections.sort(null, new Comparator(){
      public int compare(Object o1, Object o2)
      {
        return 0;
      }

      public boolean equals(Object obj)
      {
        return false;
      }
    });
Und implementierst dort die Vergleiche aus!
 
G

Guest

Gast
hallo,

ich glaub ich bräuchte etwas hilfe dabei :oops:.

mein ansatz wäre. für jedes objekt würde ich einen long aus datum und zeit erstellen und dann vergleichen.

in der art (schematisch):

Code:
if(object1(datum und zeit als long) < object2(datum und zeit als long)){
   -1
}
else{
   if(object1(datum und zeit als long) == object2(datum und zeit als long)){
      return 1
   }
   else{
      return 0
   }
}

aber wie mach ich die zusätzliche sortierung nach state?

grüße
 

Murray

Top Contributor
Code:
if(object1(datum und zeit als long) < object2(datum und zeit als long)){
   return -1; //--- kleiner
} else if(object1(datum und zeit als long) > object2(datum und zeit als long)){
      return 1; //--- groesser
} else{
      return object1.state.compareTo( object2.state); //--- bei gleichen Daten state beruecksichtichtigen
}
 
G

Guest

Gast
hallo

danke für die hilfe. ich hab es jetzt so gemacht.

object1.datum + object1.time und object2.datum + object2.time ergeben jeweils einen long!

Code:
int result = (object1.datum + object1.time).compareTo(object2.datum + object2.time)

if(result == 0){
  return object1.state.compareTo(object2.state);
}

return result;

das wäre meine optimierte lösung. muss mal schauen ob die funktioniert

grüße
 
S

SlaterB

Gast
pass aber auf mit den Wertebereichen,
wenn die Zahlen so sind wie ganz oben angegeben,
dann ist

date = "20081110", time = "120000",

in der Summe kleiner als

date = "20081106", time = "150000",

denn wenige Tage machen nur minimale Wertunterschiede, wenige Stunden dagegen umso mehr,

du könntest noch tricksen, indem du date mit 10.000 multiplizierst oder ähnliches,
da kann man aber schnell die Grenzen des Zahlenraums erreichen,

mit long müsste es noch gehen, aber immer mit Gefahr von Rechen-/ Rundungsfehlern bei einem Anfänger,

wenn du ausführlich testest, dann sollte das aber als Gewissheit reichen
 
G

Guest

Gast
hallo SlaterB,

werte unterschiede gibt es eigentlich nicht, oder? wenn ich doch ein datum und eine uhrzeit nehme diese umwandele als long dann ist dieser im eindeutig, wenn unterschiedliche datensätze.

d.h das datum und die uhrzeit

date = "20081110", time = "120000" = 1226314800000

und

date = "20081106", time = "150000" = 1225980000000

der zweite wert (20081106, 150000) ist kleiner als der erste. also meiner meinung nach kann dieses problem nicht auftreten. ich lasse mich aber eines besseren belehren :) vielleicht verstehe ich auch grad das problem nicht.

grüße
 
S

SlaterB

Gast
ich hab's ja eingeschränkt, gilt nur 'wenn die Zahlen so sind wie ganz oben angegeben',

date = "20081110", time = "120000" =
-> long 20081110 + 120000 = 20.081.100 + 120.000 = 20.201.100

wenn du dagegen long-Millisekunden hast, dann ich sehe ich zunächst auch keine Probleme
 
G

Guest

Gast
hallo,

ach so :oops: , dann hab ich das falsch verstanden. mich hat es schon etwas gewundert.

aber ich hatte noch eine frage zum sortieren.

bei einer compare methode bzw. bei der verwendung des comparator werden -1, 0 oder 1 zurückgegeben. welche auswirkung hat das auf den sortieralgo.? welcher wird da eigentlich verwendet? ich wurde dies gerne nachvollziehen können, gerade bei dem zweiten sortieren:


Code:
if(result == 0){
  return object1.state.compareTo(object2.state);
}

was passiert eigentlich wenn ich anders herum sortiere? also so:

Code:
if(result == 0){
  return object[b]2[/b].state.compareTo(object[b]1[/b].state);
}

viele grüße
 
S

SlaterB

Gast
na offensichtlich wird dann die Liste genau entgegengesetzt sortiert,
bzw. wenn du nur die letzte Zeile änderst, dann wirkt sich das ja nur auf die Sortierung von Elementen mit gleichem Datum + Zeit aus,
obs in diesem Fall aufsteigend nach State geht oder absteigend

der primäre Sortiermechanismus dürfte MergeSort sein, kannst bei google nachschlagen,
ist aber austauschbar,

alle Sortieralgorithmen funktionieren nach irgendeiner allgemeinen Strategie
und brauchen vom User letztlich nur die Info, ob Objekt1 vor oder nach Objekt2 steht
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
Willi.We Array sortieren Allgemeine Java-Themen 5
L ArrayList sortieren Allgemeine Java-Themen 2
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
C MySQL Tabellen sortieren. Allgemeine Java-Themen 33
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
P Wertepaare sortieren Allgemeine Java-Themen 3
MiMa Sortieren nach Stellenangaben Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P Listen sortieren Allgemeine Java-Themen 1
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5
B Algortihmus zum linearen Sortieren Allgemeine Java-Themen 1
K ArrayList sortieren Allgemeine Java-Themen 16
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
2 Mehrere Uhrzeiten Sortieren Allgemeine Java-Themen 2
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
Bluedaishi String Array mit Datum und Uhrzeit String sortieren Allgemeine Java-Themen 6
K Sortieren nach Vorgabe Allgemeine Java-Themen 6
S Erste Schritte Arrayliste alphabetisch sortieren mit Eingabe Allgemeine Java-Themen 9
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Sortieren und Leerzeichen Allgemeine Java-Themen 11
W Array Indizes sortieren Allgemeine Java-Themen 16
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
E Array alphabetisch sortieren Allgemeine Java-Themen 1
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
P Beim sortieren nullpointerexception Allgemeine Java-Themen 12
G Map nach key sortieren Allgemeine Java-Themen 14
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
S Int Values sortieren Allgemeine Java-Themen 7
S Sortieren nach Objekten Allgemeine Java-Themen 13
A 2D-array problem (sortieren) Allgemeine Java-Themen 6
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
D priority queue sortieren Allgemeine Java-Themen 10
G List<Person> sortieren Allgemeine Java-Themen 6
K Hashmap sortieren Allgemeine Java-Themen 6
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
M ArrayList<String>, String häufigkeit sortieren Allgemeine Java-Themen 4
J Wie sortieren? Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
K Strings sortieren (knifflig) Allgemeine Java-Themen 7
B JTable nach Icon sortieren Allgemeine Java-Themen 6
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
J Map nach value sortieren Allgemeine Java-Themen 14
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
V ArrayList sortieren Allgemeine Java-Themen 7
S String-Array nach Datum sortieren Allgemeine Java-Themen 10
Developer_X Ein Array nach einem bestimmten Attribut sortieren Allgemeine Java-Themen 3
B Sortieren mit generischen Datentypen Allgemeine Java-Themen 3
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
O Sortieren von Telefonnummern Allgemeine Java-Themen 8
D JTabel sortieren nach mehreren kriterien Allgemeine Java-Themen 3
G Verschachtelte Treemaps, nach Value sortieren Allgemeine Java-Themen 11
K ArrayList nach bestimmtem Muster sortieren Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
S Koordinatentupel-Map sortieren?? Allgemeine Java-Themen 16
C ArrayList sortieren (mehrere Kriterien) Allgemeine Java-Themen 6
G ArrayList mit quicksort sortieren Allgemeine Java-Themen 9
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
Z Als Final deklarierte Klasse im Array sortieren Allgemeine Java-Themen 2
C ArrayList nach Datum sortieren Allgemeine Java-Themen 7
O ArrayList sortieren Allgemeine Java-Themen 8
G ArrayList mit Indices parallel sortieren Allgemeine Java-Themen 8
D HashMap sortieren Allgemeine Java-Themen 2
C Sortieren File[] Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
O Vektoren in Vektor sortieren aber mit Java 1.4 (!) Allgemeine Java-Themen 4
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
A Sortieren mit Java Allgemeine Java-Themen 3
J Properties sortieren Allgemeine Java-Themen 6
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
E Bitte um Rat: Sortieren mit ArrayList Allgemeine Java-Themen 2
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
G List mit selbstdefinierten Objekten sortieren Allgemeine Java-Themen 2
F Doppelt verkettete Liste sortieren? Allgemeine Java-Themen 8
S ArrayList nach mehreren Spalten sortieren? Allgemeine Java-Themen 13
G Set absteigend Sortieren Allgemeine Java-Themen 6
B ein spezielles Byte-Array sortieren Allgemeine Java-Themen 11
D Sortieren? Allgemeine Java-Themen 13
N ArrayList sortieren Allgemeine Java-Themen 10
L Nach Häufigkeit sortieren Allgemeine Java-Themen 6
S Dten im Excel sortieren Allgemeine Java-Themen 5
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
H Objekte Sortieren Allgemeine Java-Themen 4
F Kann man String[] sortieren? Allgemeine Java-Themen 2
H will einfach nicht sortieren! Allgemeine Java-Themen 23
T Collections/Arrays sortieren => ä, ö, ü, ß Groß/klein Allgemeine Java-Themen 3
T Problem mit Sortieren Fehler: incompatible Types! Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben