CyborgBeta
Captain
- Registriert
- Jan. 2021
- Beiträge
- 3.210
Moin,
ich habe in einem Review den Hinweis bekommen, dass diese Methode nur schwer verständlich sei. Stattdessen solle ich in mehrere kleinere Methoden splitten und Datentypen einführen. Aus meiner Sicht ist die Methode aber nicht zu lang und die zyklomatische Komplexität auch nicht zu hoch ... Könnt ihr bitte mal schauen, ob diese Methode aus eurer Sicht noch verständlich ist (oder ob ich wirklich eine Vereinfachung übersehen habe)? Danke.
ich habe in einem Review den Hinweis bekommen, dass diese Methode nur schwer verständlich sei. Stattdessen solle ich in mehrere kleinere Methoden splitten und Datentypen einführen. Aus meiner Sicht ist die Methode aber nicht zu lang und die zyklomatische Komplexität auch nicht zu hoch ... Könnt ihr bitte mal schauen, ob diese Methode aus eurer Sicht noch verständlich ist (oder ob ich wirklich eine Vereinfachung übersehen habe)? Danke.
Java:
public static List<List<List<Object>>> getTodayData() throws Exception {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
List<List<Object>> data = MDB.get();
List<List<List<Object>>> tables = new ArrayList<>();
data.sort(Comparator.comparing(a -> ((java.sql.Timestamp) a.get(0))));
for (int i = 0; i < data.size(); ) {
List<List<Object>> table = new ArrayList<>();
boolean isFirstEntry = true;
while (isFirstEntry || i < data.size() && data.get(i - 1).get(0).equals(data.get(i).get(0))) {
table.add(data.get(i++));
isFirstEntry = false;
}
tables.add(table);
}
for (List<List<Object>> table : tables) {
table.add(
Stream.concat(
Stream.of(table.get(0).get(0), "sum", "---"),
IntStream.range(3, 10)
.mapToObj(i -> table.stream().mapToDouble(r -> (double) r.get(i)).sum()))
.collect(Collectors.toCollection(ArrayList::new)));
}
for (List<List<Object>> table : tables) {
for (List<Object> row : table) {
row.set(0, df.format(new Date(((java.sql.Timestamp) row.get(0)).getTime())));
IntStream.range(3, row.size())
.forEach(i -> row.set(i, String.format("%.2f", (Double) row.get(i))));
}
}
return tables;
}
MDB.get()
gibt Daten von einer Datebank zurück (Tabellen in einer Tabelle ...).