ich ein TreeMap wie diese erstellt haben:Java TreeMap null zurück für Schlüssel, wenn der Wert existiert
Map<Date, List<MyInput>> inputsByDate = new TreeMap<>(new Comparator<Date>() {
@Override
public int compare(Date lhs, Date rhs) {
return dateUtil.compareDay(lhs, rhs);
}
});
im Komparator Meine Methode ist nicht schön, aber zumindest identifiziert Ähnlichkeit (ich verwende HashMap nicht mit equals und Hash aus anderen Gründen):
public int compareDay(Date lhs, Date rhs) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(lhs);
cal2.setTime(rhs);
boolean sameDay = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);
if (sameDay) {
return 0;
} else {
return -1;
}
}
Wie auch immer, das Problem ist das folgende Schnipsel. Das letzte Element ist null, wenn ich es abrufe.
public List<MyType> convert(Map<Date, List<MyInput>> inputByDate, Map<Date, Boolean> isDoneByDate) {
List<MyType> result = Lists.newArrayList();
for (Date dateKey : inputByDate.keySet()) {
boolean isDone = false;
Boolean res = isDoneByDate.get(dateKey);
if (res != null) {
isDone = res;
}
List<MyInput> inputs = inputByDate.get(dateKey);
MyType retrieved=new MyType(dateKey, inputs, isDone);
result.add(retrieved);
}
return result;
}
Als ich den letzten Schnipsel mit dem Debugger ausführen ich deutlich, dass es sehen ist (als Beispiel) 3 Schlüssel mit Werten, die nicht null sind. Ich muss hier etwas vermissen, weil ich nicht sehen kann, wie Berichte null sein können, wenn ich validiert habe, dass jedem Schlüssel zuvor ein gültiges Paar zugeordnet wurde. Jede Hilfe würde sehr geschätzt werden.
Der Komparator muss <, ==, > ermitteln, nicht nur == und! =. Das ist negativ 0 oder positiver Rückgabewert. Überprüfen Sie die Dokumentation für Komparatoren. -1 bedeutet lhs
Btw, meinst du 'inputByDate.keySet()' anstelle von 'inputByDate()'? Und was ist 'reportsByDay'? – Thomas
Meine schlechte, meine "Verschleierung", die ich auf meinen tatsächlichen Code angewendet habe, war fehlerhaft. Jetzt korrigiert. –