Map (Key=String; Value = Vector) Value/Vector sortieren

Todesbote

Mitglied
Hallo zusammen!

Ich habe eine Map in der ich zu einem bestimmten Key (serialNr) einen Vector als Value habe.
Da ich nun mehrere Werte in diesem Vector gespeichert habe (auch verschiedene Datentypen int, String, Date) möchte ich den Vector sortieren.
Es soll nach der Uhrzeit (Date (mit SimpleDateFormat)) sortiert werden.
Laut Google kann ich die Sortierung mit einem Comperator machen.
Allerdings habe ich nach längerer Suche noch keine Lösung für mein Problem gefunden wie ich den Vector aufrufen kann und nach der Uhrzeit sortieren kann.

2 Files die Komponenten mit dem gleichen Key enthalten und somit in dem selben Vector gespeichert werden.

File 1:

LogEintrag [stationsnummer=0, status=freigegeben, uhrzeit=Mon Feb 06 16:22:38 CET 2012,

LogEintrag [stationsnummer=0, status=Update, uhrzeit=Fri Jul 27 01:16:24
CEST 2012,

File 2:

LogEintrag [stationsnummer=0, status=freigegeben, uhrzeit=Mon Feb 06 17:22:38 CET 2012,

LogEintrag [stationsnummer=0, status=Update, uhrzeit=Fri Jul 27 02:16:24 CEST 2012,


Ausgabe bisher:
LogEintrag [stationsnummer=0, status=freigegeben, uhrzeit=Mon Feb 06 16:22:38 CET 2012,

LogEintrag [stationsnummer=0, status=Update, uhrzeit=Fri Jul 27 01:16:24
CEST 2012,

LogEintrag [stationsnummer=0, status=freigegeben, uhrzeit=Mon Feb 06 17:22:38 CET 2012,

LogEintrag [stationsnummer=0, status=Update, uhrzeit=Fri Jul 27 02:16:24 CEST 2012,


Soll-Ausgabe:
LogEintrag [stationsnummer=0, status=freigegeben, uhrzeit=Mon Feb 06 16:22:38 CET 2012,

LogEintrag [stationsnummer=0, status=freigegeben, uhrzeit=Mon Feb 06 17:22:38 CET 2012,

LogEintrag [stationsnummer=0, status=Update, uhrzeit=Fri Jul 27 01:16:24
CEST 2012,

LogEintrag [stationsnummer=0, status=Update, uhrzeit=Fri Jul 27 02:16:24 CEST 2012,
[B]
Mein bisheriger Code der Klasse in der das Sortieren stattfinden soll:[/B]
[JAVA=42]
package de.odr.main;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import java.util.Vector;
import java.util.Collections;

public class EintraegeSortieren implements Comparator<EintraegeSortieren> {

Map<String, Vector<LogEintrag>> eintraegeSortieren = new TreeMap<String, Vector<LogEintrag>>();

public EintraegeSortieren(Vector<LogEintrag>logEintraege){
for(LogEintrag le : logEintraege){
if(le.serienNr!=null){
//System.out.println(le.toString());
if(eintraegeSortieren.containsKey(le.serienNr)==false){
Vector <LogEintrag> v = new Vector <LogEintrag>();
v.add(le);
eintraegeSortieren.put(le.serienNr, v);
}
else{
Vector<LogEintrag>vle = eintraegeSortieren.get(le.serienNr);
vle.add(le);
}
}

}
this.print();
}
public void print(){
Iterator<String> itr = eintraegeSortieren.keySet().iterator();
while (itr.hasNext()) {
//System.out.println("str = " + itr.next());
Vector <LogEintrag> logEintraege = eintraegeSortieren.get(itr.next());
System.out.println("\n");
for(LogEintrag le : logEintraege){
System.out.println(le.toString());
}
}
}
@Override
public int compare(EintraegeSortieren o0, EintraegeSortieren o1) {

return 0;
}
}
[/code]
 
Zuletzt bearbeitet:

Timothy Truckle

Top Contributor
Ist der Vector selbst ein Logeintrag oder sind darin die (in sich) zu sortierenden Logeinträge?

Sollen die Logeinträge über alle Einträge der Map hinweg sortiert werden?

Und sollten Logeinträge überhaupt sortiert werden?

bye
TT
 
N

nillehammer

Gast
Wie du einen Vector mit gegebenem Comparator sortiert bekommst? Vector implementiert List und ist darum ein geeigneter Parameter für die Methode Collections#sort(java.util.List, java.util.Comparator)

[EDIT]Habe mir grad Deinen Code angeschaut. Ich glaube, es ist noch nicht klar, was ein Comparator macht, warum er generisch ist und welcher Typparameter sinnvoll ist.

Wenn du also Logeinträge miteinander vergleichen willst (um sie entspr. des Vergleichsergebnisses zu sortieren), brauchst Du einen Vergleicher für Logeinträge. Englisch heißt das Comparator for LogEintrag und auf Java heißt das so:
Java:
Comparator<LogEintrag>
Implementiere den, hole Dir in der compare-Methode die Dates und vergleiche diese (Hinweis: Date implementiert Comparable<Date>) ist also direkt mit anderen Dates vergleichbar.
[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

Todesbote

Mitglied
Ist der Vector selbst ein Logeintrag oder sind darin die (in sich) zu sortierenden Logeinträge?
LogEintrag ist eine Zeile aus meinem CLS File.

Sollen die Logeinträge über alle Einträge der Map hinweg sortiert werden?

Und sollten Logeinträge überhaupt sortiert werden?

Zu jedem Schlüssel gehören ja sogesehen mehrere Zeilen des CLS Files.
Die Zeilen bilden den Vector.
Die Zeilen die im Vector enthalten sind sollen nach der Uhrzeit sortiert werden.
Sprich jedes Key Value paar muss sortiert werden.

mfg
 

Timothy Truckle

Top Contributor
LogEintrag ist eine Zeile aus meinem CLS File.
Zu jedem Schlüssel gehören ja sogesehen mehrere Zeilen des CLS Files.
Die Zeilen bilden den Vector.
Klar soweit.

Die Zeilen die im Vector enthalten sind sollen nach der Uhrzeit sortiert werden.
Sprich jedes Key Value paar muss sortiert werden.
d.h.: Du willst gar nicht die Vectoren sortieren, sondern die Keys der Map aber entsprechend der in den Vectoren gespeicherten Zeitangaben?

Da würde ich pauschal sagen dass eine Map die falsche Datenstruktur für Dein Problem ist.

Du solltest eine Klasse schreiben, die ein Feld für Deine ID und den Vector auf nimmt. Die könnte man in einer [JAPI]List[/JAPI] sammeln und relativ einfach mittels dem Comparator sortieren (oder die Klasse gleich [JAPI]Sortable[/JAPI] implementieren lassen...).

bye
TT
 

Todesbote

Mitglied
Aber wie bekomme ich die Dates in die compare-Methode?
mfg

Das Problem hab ich nun doch hinbekommen. Allerdings funktioniert das sortieren noch nicht richtig.
Soweit mal mein geänderter Code:
[JAVA=42]
@Override
public int compare(LogEintrag o0, LogEintrag o1) {
if(o0.uhrzeit.after(o1.uhrzeit))
return 1;
else if (o0.uhrzeit.before(o1.uhrzeit))
return -1;
else
return 0;
}[/code]

mfg
 

Todesbote

Mitglied
So ich habs nun gelöst. Hab mein Value von Vector in Set geändert und den Comparator dort aufgerufen.
[JAVA=42]
public static void logEintragEinfuegen(Map<String, Set<LogEintrag>> logEintraege, LogEintrag le) {
if (le.serienNr != null) {
if (logEintraege.containsKey(le.serienNr) == false) {
Set<LogEintrag> s = new TreeSet<LogEintrag>(new LogEintragComparator());
s.add(le);
logEintraege.put(le.serienNr, s);
}
else {
Set<LogEintrag> s = logEintraege.get(le.serienNr);
s.add(le);
}
}
}
[/code]

und

[JAVA=42]

import java.util.Comparator;

public class LogEintragComparator implements Comparator<LogEintrag> {
@Override
public int compare(LogEintrag o0, LogEintrag o1) {
if(o0.uhrzeit.after(o1.uhrzeit))
return 1;
else if (o0.uhrzeit.before(o1.uhrzeit))
return -1;
else
return 0;
}
}
[/code]

Vielen Dank für eure Hilfe! =)

mfg
 

Timothy Truckle

Top Contributor
Du weist aber schon, dass das
[JAVA=44]if (logEintraege.containsKey(le.serienNr) == false) {[/code]
das selbe ist wie dass:[JAVA=44]if ( ! logEintraege.containsKey(le.serienNr)) {[/code]?
[EDIT]Und wenn wir schon dabei sind:[TIPP]Ausdrücke im If sollten möglichste positiv formuliert werden. Und damit man da nicht selbst umherkopieren muss geht in Eclipse dies: den Cursor auf das
Code:
if
stllen und <ctrl><1> drücken: der erste Vorschlag ist "invert 'if' statement"...[/TIPP][/EDIT]

bye
TT
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Java:
Set<LogEintrag> s = new TreeSet<LogEintrag>(new LogEintragComparator());
Zur Verwendung des Set-Interfaces eine Anmerkung:
Set heißt, es kommen keine Duplikate vor. Durch den Einsatz der Implementierung TreeSet und des Datums-Comparators heißt das bei Dir, dass keine zwei Logdatensätze mit dem selben Datum gespeichert werden können. Wenn Du damit leben kannst, gut. Ansonsten nimm eine Liste und sorge mittels Collections.sort für die Sortierreihenfolge.

Zum Comparator eine Anmerkung:
So wie Du es gemacht hast, ist es etwas umständich. Da Date selbst Comparable ist, kann man das ganze verkürzen:
Java:
public class LogEintragComparator implements Comparator<LogEintrag> {
    @Override
    public int compare(LogEintrag o0, LogEintrag o1) {
       return o0.uhrzeit.compareTo(o1.uhrzeit);
      }
}
 
Zuletzt bearbeitet von einem Moderator:

Todesbote

Mitglied
Zum Comparator eine Anmerkung:
So wie Du es gemacht hast, ist es etwas umständich. Da Date selbst Comparable ist, kann man das ganze verkürzen:
Java:
public class LogEintragComparator implements Comparator<LogEintrag> {
    @Override
    public int compare(LogEintrag o0, LogEintrag o1) {
       return o0.uhrzeit.compareTo(o1.uhrzeit);
      }
}

Danke für den Tipp.
Das mit Set kann ich so lassen, da die Zeitwerte die einem Key zugeordnet sind nicht doppelt vorkommen.

mfg
 

Todesbote

Mitglied
Du weist aber schon, dass das if (logEintraege.containsKey(le.serienNr) == false) {
das selbe ist wie dass:[JAVA=44]if ( ! logEintraege.containsKey(le.serienNr)) {[/code]?
Jetzt weiß ichs =)

[EDIT]Und wenn wir schon dabei sind:[TIPP]Ausdrücke im If sollten möglichste positiv formuliert werden. Und damit man da nicht selbst umherkopieren muss geht in Eclipse dies: den Cursor auf das
Code:
if
stllen und <ctrl><1> drücken: der erste Vorschlag ist "invert 'if' statement"...[/TIPP][/EDIT]

Ok danke =)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
J Java call by Value oder Reference Java Basics - Anfänger-Themen 35
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
D String value change listener Java Basics - Anfänger-Themen 2
G Java Object value und entity? Java Basics - Anfänger-Themen 2
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
F Entity vs value Java Basics - Anfänger-Themen 3
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
N JFreeChart - Value und veriable Zeitachse Java Basics - Anfänger-Themen 15
J Open Office Property Value mit Java aufrufen Java Basics - Anfänger-Themen 0
H call by reference & value Java Basics - Anfänger-Themen 14
R Property Value als null setzen Java Basics - Anfänger-Themen 1
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
B Compiler-Fehler Hilfe!!! required variable ; found value Java Basics - Anfänger-Themen 4
M Arrays als return Value? Java Basics - Anfänger-Themen 2
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
T Schleifenindex "by reference" / "by value" Java Basics - Anfänger-Themen 13
V Methoden key value Parameter Java Basics - Anfänger-Themen 11
C Probleme bei einem Stringvergleich - Attribut "value" unterscheidet sich Java Basics - Anfänger-Themen 9
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
B Call by Value/Reference Java Basics - Anfänger-Themen 4
B Variablen unique Value Java Basics - Anfänger-Themen 12
R Key/Value ohne Maps? Java Basics - Anfänger-Themen 2
B Datentypen Key/Value sortieren Java Basics - Anfänger-Themen 15
S Warnung in Eclipse: unassigned closeable value Java Basics - Anfänger-Themen 20
J Objectreferenz statt value an Methode uebergeben? Java Basics - Anfänger-Themen 2
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
P Key anhand von Value finden (Hashtable) Java Basics - Anfänger-Themen 3
B JavaSkript Form-Tag Value & Post Java Basics - Anfänger-Themen 6
M String( char[] value ) Java Basics - Anfänger-Themen 3
feardorcha Java von Kopf bis Fuß "Java ist Pass-by-Value" Java Basics - Anfänger-Themen 6
M Value-returing Methode funktioniert nicht Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
M jSpinner: nur angezeigte Value auslesen? Java Basics - Anfänger-Themen 3
F Erste Schritte return (char)toUnsignedInt(value) Java Basics - Anfänger-Themen 2
J unexpected type variable/value Java Basics - Anfänger-Themen 2
F Hilfe Regular Expression Grouping Value Java Basics - Anfänger-Themen 3
K unexpected type variable/value Java Basics - Anfänger-Themen 7
turmaline Duration Value Java Basics - Anfänger-Themen 8
T Enum - Key als Value ermitteln Java Basics - Anfänger-Themen 7
K java pass by value Java Basics - Anfänger-Themen 29
capgeti Datentypen Static generic return value von Subclass? Java Basics - Anfänger-Themen 9
A ein map key/value"problem" Java Basics - Anfänger-Themen 9
A Regex get Value Java Basics - Anfänger-Themen 5
D Key und Value aus hashMap speichern Java Basics - Anfänger-Themen 7
M HashMap-Value | Array Java Basics - Anfänger-Themen 3
N Methode erfüllt nicht den zweck (Call by value) Java Basics - Anfänger-Themen 17
0 Call by value Java Basics - Anfänger-Themen 3
H TreeMap.remove(value) - und nicht mit key! Geht das? Java Basics - Anfänger-Themen 18
H Abhängigkeiten (key-value ) Java Basics - Anfänger-Themen 19
P Value einer Konstante lesen Java Basics - Anfänger-Themen 2
lumo Magic Value?! Java Basics - Anfänger-Themen 19
S HashMap: Rückgabe des key zu bestimmten value Java Basics - Anfänger-Themen 3
K Maps mit veränderlichen Daten als Value Objekte Java Basics - Anfänger-Themen 3
D Hashtable Value(Array) in String und dann Ausgeben Java Basics - Anfänger-Themen 23
? key - value Struktur in ArrayList Java Basics - Anfänger-Themen 3
G Container für [key,value] elemente ? Java Basics - Anfänger-Themen 7
G Überprüfen ob einen Array einen Value enthält Java Basics - Anfänger-Themen 13
C Passing Reference by Value Java Basics - Anfänger-Themen 4
A Integer Value Error beim Start Java Basics - Anfänger-Themen 5
G jProgressBar value aus anderer Klasse heraus verändern Java Basics - Anfänger-Themen 7
F Hashtable mit String[] als value Java Basics - Anfänger-Themen 2
L HashMap Key<->Value vertauschen Java Basics - Anfänger-Themen 5
T Klasse String enthält Methode value? Java Basics - Anfänger-Themen 2
T Suche über mehrere Felder value = key = value Java Basics - Anfänger-Themen 3
S Value von ein Hashtable collectionen Java Basics - Anfänger-Themen 3
S Value sortieren Java Basics - Anfänger-Themen 3
D Map (HashMap) sortiern nach den Value? Java Basics - Anfänger-Themen 16
W Hashtable Integer als Value Java Basics - Anfänger-Themen 6
M value von Komponenten erhalten Java Basics - Anfänger-Themen 3
G TreeMap sortieren über ArrayList als Value Java Basics - Anfänger-Themen 9
L Value aus einer Map holen Java Basics - Anfänger-Themen 10
R kleinster Value in HashMap Java Basics - Anfänger-Themen 12
H HashMap initialisieren<Key, Value>? Java Basics - Anfänger-Themen 9
B map value auslesen Java Basics - Anfänger-Themen 2
V Beginner question with check true value??? Java Basics - Anfänger-Themen 3
S call by reference vs. call by value - pls help Java Basics - Anfänger-Themen 7
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
P Objekte in Vector werden überschrieben Java Basics - Anfänger-Themen 4
P Array in Vector speichern Java Basics - Anfänger-Themen 2
E Methoden new Vector().add(x).add(x); ? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben