У меня есть класс вроде этого:
class MultiDataPoint {
private DateTime timestamp;
private Map<String, Number> keyToData;
}
и я хочу создать для каждого MultiDataPoint
class DataSet {
public String key;
List<DataPoint> dataPoints;
}
class DataPoint{
DateTime timeStamp;
Number data;
}
конечно, "ключ" может быть одним и тем же в нескольких объектах MultiDataPoints.
Итак, для a List<MultiDataPoint>
, как использовать потоки Java 8 для преобразования в List<DataSet>
?
Вот как я сейчас делаю конвертацию без потоков:
Collection<DataSet> convertMultiDataPointToDataSet(List<MultiDataPoint> multiDataPoints)
{
Map<String, DataSet> setMap = new HashMap<>();
multiDataPoints.forEach(pt -> {
Map<String, Number> data = pt.getData();
data.entrySet().forEach(e -> {
String seriesKey = e.getKey();
DataSet dataSet = setMap.get(seriesKey);
if (dataSet == null)
{
dataSet = new DataSet(seriesKey);
setMap.put(seriesKey, dataSet);
}
dataSet.dataPoints.add(new DataPoint(pt.getTimestamp(), e.getValue()));
});
});
return setMap.values();
}