Ich habe ein Problem, bei dem ich glaube, dass ich mehrere Konzepte kombinieren muss, über die ich lese, aber ich kann keinen Weg finden, sie zu kombinieren, die sinnvoll sind oder was am effizientesten wäre. Hier ist meine Situation:Wie durchläuft man eine Liste von Objekten, konvertiert ein Feld, vergleicht es und sortiert nach diesem Feld?
Ich arbeite mit Microservices, weshalb dies so seltsam spezifisch ist. Im Wesentlichen bekomme ich eine Liste von Volume-Objekten von einem anderen Dienst. Ein Volume-Objekt enthält drei Felder, einen String-Typ, ein String-Datum (das tatsächlich die Zeit im Format "HH: mm" darstellt, die Datenmodellierer für die Namenskonventionen verantwortlich machen) und einen int-Abschluss.
Was ich versuche ist, diese Liste von Objekten zu nehmen und nach Datum (Zeit) zu sortieren, dann erstellen Sie eine neue Liste von Objekten, die die gleichen Daten (Zeiten) enthalten, aber unterschiedliche Feldwerte haben Ich mache Berechnungen. Um nach Zeit zu sortieren, glaube ich, dass ich die Zeitfelder in Date-Objekte konvertieren und diese dann vergleichen muss. Ich habe Probleme, die Objekte zu durchlaufen und die konvertierten Felder zu vergleichen. Etwas, das ich fühle, hat mich auf den richtigen Weg gebracht ist dies: How to sort a List<Object> alphabetically using Object name field
Aber ich kann nicht scheinen, dass das funktioniert. Hier ist mein Code:
volumeResources.sort(volumeResources, new Comparator<VolumeResource>(){
@Override
public int compare(VolumeResource v1, VolumeResource v2) {
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
try {
Date d1 = format.parse(v1.getDate());
Date d2 = format.parse(v2.getDate());
} catch (ParseException e) {
log.error("Error in parsing string to date. ", e);
}
return d1.compareTo(d2);
}
});
nun rechts von der Fledermaus, ich weiß, dass dies falsch sein muss, weil ich die VolumeResources v1 und v2 begann zu vergleichen, sondern versucht, die Daten am Ende zu vergleichen. Anstelle der return-Anweisung oben, habe ich versucht, auch die unten, aber ich glaube nicht, dass wird immer funktionieren, weil es nicht wirklich ist das formatierte Objekt zu einem Date-Objekt einstellen:
return format.parse(v1.getDate()).compareTo(format.parse(v2.getDate()));
Also das ist, wo ich bin verloren. Dies scheint ein ziemlich einfaches Bedürfnis zu sein, wenn es im Pseudocode beschrieben wird, aber ich kann nicht herausfinden, wie es funktional funktioniert. Bonuspunkte, wenn es einen Weg gibt, die anderen Felder zu bevölkern, brauche ich leicht davon. Doppelte Bonuspunkte für die Verwendung von Lambdas oder helfen mir, dies effizient zu machen.
Vielen Dank für alle.
Was _exactly_ ist Ihr Problem? Wie wird Ihr Programm nicht wie erwartet ausgeführt? – Marvin
Kompiliert das überhaupt? – assylias
@Marvin Dieses Hauptproblem versucht herauszufinden, wie eine Liste von Objekten nach der Zeitzeichenfolge sortiert wird. – Crislips