【发布时间】:2017-03-16 18:14:42
【问题描述】:
我有一个这样的类来存储来自 REST-API 调用的 APIResponse
class DataSet {
public String ID;
List<DataPoint> dataPoints;
}
class DataPoint{
DateTime timeStamp;
Double value;
}
我有一个 DataSet 的 ArrayList,需要转换成这样的东西
[{x: timestamp1, y: value1}, {x: timestamp2, y: value2},... {x: timestampn, y: valuen}]
对于 ArrayList 中的每个元素。
我正在学习 Java 8 的 Stream API,并希望使用相同的方法。 想知道如何使用 Stream API java 8 的 lambda 表达式得出输出。
目前,期望的输出是通过使用 for-each 的传统方式实现的,即:
List<ArrayList<Map<String, Object>>> transformedObject = new List<ArrayList<Map<String, Object>>>();
for(DataSet m : apiResponseArray){
ArrayList<Map<String, Object>> dataobj = new ArrayList<Map<String, Object>>();
List<DataPoint> listData =m.getdataPoints();
for(DataPoint d : listData)
{
Map<String, Object> dataMap = new LinkedHashMap<String, Object>();
dataMap.put("x", d.getTime(););
dataMap.put("y", d.getValue());
dataobj.add(dataMap);
}
transformedObject.add(dataobj);
}
Gson gson = new Gson();
return gson.toJson(transformedObject);
提前致谢!!!
【问题讨论】:
-
你可以对
apiResponseArray进行平面映射,但我怀疑它会显着改进你的代码。 -
@shmosel 我怎样才能让流以这种方式返回地图的数组列表列表?
-
@shmosel 你还有什么建议可以提高性能?
-
是否存在性能问题?你什么都没提。
-
@shmosel 是的,转换需要相当多的时间。由于响应很大,我认为使用流可能会有所帮助。如果我的想法不对,请原谅我。
标签: java lambda java-8 java-stream collectors