large-file-reading-challenge/src/main/java/eu/ztsh/lfr/model/Temperatures.java
2024-07-18 02:51:32 +02:00

33 lines
1.3 KiB
Java

package eu.ztsh.lfr.model;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.stream.Collectors;
public class Temperatures extends ConcurrentHashMap<String, ConcurrentMap<Integer, YearDataAccumulator>> {
public void addData(DataRow dataRow) {
putIfAbsent(dataRow.city(), new ConcurrentHashMap<>());
var city = get(dataRow.city());
city.putIfAbsent(dataRow.year(), new YearDataAccumulator());
city.get(dataRow.year()).add(dataRow.temperature());
}
public Averages getAverages() {
var computed = entrySet().stream()
.map(entry -> {
var newEntry = entry.getValue().entrySet().stream()
.map(yearEntry -> {
var average = new Average();
average.setYear(yearEntry.getKey().toString());
average.setAverageTemperature(yearEntry.getValue().getAverage());
return average;
})
.toList();
return Map.entry(entry.getKey(), newEntry);
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
return new Averages(computed);
}
}