Treeset - Wenn bestimmtes Objekt vorkommt Counter erhöhen

Todesbote

Mitglied
Hallo zusammen,
ich habe ein TreeSet mit folgendem Inhalt(Reihenfolge und Länge kann variieren):

[casdu=8307, stationsname=Am_Goldberg, stationsnummer=1, status=freigegeben, uhrzeit=Thu Jun 28 23:04:03 CEST 2012]
[casdu=8307, stationsname=Am_Goldberg, stationsnummer=1, status=Ausfall, uhrzeit=Fri Jul 27 01:30:45 CEST 2012]
[casdu=8307, stationsname=Am_Goldberg, stationsnummer=1, status=Update, uhrzeit=Fri Jul 27 02:30:45 CEST 2012]
[casdu=8307, stationsname=Am_Goldberg, stationsnummer=1, status=Ausfall, uhrzeit=Fri Jul 27 03:30:45 CEST 2012]

Nun möchte ich einen Counter einbauen der mir z.B. die Ausfälle zählt.
Die API und Google konnten mir hier nicht weiterhelfen.
Außerdem möchte ich mir die Uhrzeit des letzten Ausfalls angeben lassen.

mfg
 
Zuletzt bearbeitet:
Java:
for (Element e : treeSet)
{
     if (e.isAusfall()) countAndStoreTimeIfTimeIsLargerThanPrevious(butDoNotCallThisMethodLikeThis);
}
 
Ich habe eine Csv Datei die ich einlese und die Werte verschiendenen Objekten zuweise.
Anschließend speichere ich diese in einer TreeMap<String,TreeSet<LogEintrag>>
Somit werden mehrere Zeilen der Csv Datei einem key zugeordnet.
Den Inhalt den ich gepostet habe ist der Inhalt eines key´s.
In dem Set befinden sich also Objekte.
z.B. int casdu;
String Stationsname;

mfg
 
Java:
for (Element e : treeSet)
{
     if (e.isAusfall()) countAndStoreTimeIfTimeIsLargerThanPrevious(butDoNotCallThisMethodLikeThis);
}

Damit kann ich nicht wirklich was anfangen...
Hier mal mein bisheriger Code.

[JAVA=42]
public void ausfallcounter() {
for(Map.Entry<String, TreeSet<LogEintrag>> e : myMap.entrySet()){
TreeSet<LogEintrag> value = e.getValue();
//Hier soll Counter zählen

//Hier soll letzer Ausfall angegeben werden
[/code]

Wäre ne Idee von mir gewesen gibt aber immer 0 zurück. Funktioniert also nicht.

[JAVA=42]
public void ausfallcounter() {
for(Map.Entry<String, TreeSet<LogEintrag>> e : myMap.entrySet()){
TreeSet<LogEintrag> value = e.getValue();
int counter=0;
if (value.iterator().next().status.equals("Ausfall")) {
counter=counter++;
return;
}
System.out.println(counter);
}
}
[/code]

mfg
 
Zuletzt bearbeitet:
So ich habe meinen Code nun nochmal verändert.
Außerdem habe ich die Libary Joda Time verwendet.
Ich rechne nun auch die Zeitdauer eines Ausfalls aus.
Kann ich das irgendwie einfacher gestalten? z.B. über die auskommentierte Methode?
Bisher hat es da nur funktioniert wenn ich dann z.B. "ausfallDauer.gethours();" gemacht habe um die Stunden zu bekommen.
Kann ich das nicht irgendwie so gestalten das ich ein Date zurückbekomme("dd.MM.yyyy HH:mm:ss:SSS")?

[JAVA=42]
// Ausfallzähler
// Letzer Ausfall soll ausgegeben werden(Zeit-8h berücksichtigen)

public void ausfallCounter() {
for(Map.Entry<String, TreeSet<LogEintrag>> e : myMap.entrySet()){
TreeSet<LogEintrag> value = e.getValue();
int counter=0;
DateTime ausfallZeit = null;
DateTime onlineZeit = null;
Iterator<LogEintrag> logIterator = value.iterator();
while(logIterator.hasNext()){
LogEintrag logEintragNext = logIterator.next();
if (logEintragNext.status.equals("Ausfall")) {
DateTime dt = new DateTime(logEintragNext.uhrzeit);
ausfallZeit = dt.plusHours(-8); //Berechnung des Ausfalls (-8 Stunden)
counter++;
LogEintrag logEintragAfter = logIterator.next();
if(logEintragAfter.status.equals("freigegeben")){
onlineZeit = new DateTime(logEintragAfter.uhrzeit);//Uhrzeit von freigegeben
}
}
}

// Period ausfallDauer= new Period(ausfallZeit, onlineZeit, PeriodType.yearMonthDayTime());
// ausfallDauer.gethours(); // Damit vllt kürzer?
// Berechnung der Dauer des letzten Ausfalls.
Period period = new Period(ausfallZeit, onlineZeit);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendYears().appendSuffix(" Jahr(e) ")
.appendMonths().appendSuffix(" Monat(e) ")
.appendDays().appendSuffix(" Tag(e) ")
.appendHours().appendSuffix("h ")
.appendMinutes().appendSuffix("m ")
.appendSeconds().appendSuffix("s ")
.appendMillis().appendSuffix("ms")
.printZeroNever() .toFormatter();
String elapsed = formatter.print(period);

System.out.println("Ausfälle: "+counter);
System.out.println("Letzter Ausfall: "+ausfallZeit);
System.out.println("Wieder Online: "+onlineZeit);
System.out.println("Offline seit: "+elapsed);
}
}
[/code]

Die Ausgabe sieht im Moment so aus:

Letzter Ausfall: 2012-02-28T08:49:34.771+01:00
Wieder Online: 2012-02-28T17:50:34.785+01:00
Offline seit: 9h 1m 14ms

mfg
 

Zurück
Oben