如何使用Java 8流将多个元素映射到?

17 浏览
0 Comments

如何使用Java 8流将多个元素映射到?

我有一个类如下所示:

class MultiDataPoint {
  private DateTime timestamp;
  private Map keyToData;
}

我想为每个MultiDataPoint生成下面这样的类:

class DataSet {
        public String key;    
        List dataPoints;
}
class DataPoint{
  DateTime timeStamp;
  Number data;
}

当然,一个'key'可以在多个MultiDataPoint中相同。

那么,给定一个List,我如何使用Java 8的流将其转换为List

这是我目前不使用流进行转换的方法:

Collection convertMultiDataPointToDataSet(List multiDataPoints)
{
    Map setMap = new HashMap<>();
    multiDataPoints.forEach(pt -> {
        Map 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();
}

0