java - 使用 Stream API Java 8 进行嵌套对象转换

标签 java lambda java-8 java-stream collectors

我有一个这样的类来存储来自 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);

提前致谢!!!

最佳答案

一种可能的内部流方式(如果你真的想要 map 列表的列表:))

private Map<String, Object> map(DataPoint dataPoint) {
    Map<String, Object> map = new LinkedHashMap<>();
    map.put("x", dataPoint.timeStamp);
    map.put("y", dataPoint.value);
    return map;
}


List<List<Map<String, Object>>> transformedObject = dataSets.stream()
            .map(
                    dataSet -> dataSet.dataPoints.stream()
                        .map(this::map)
                        .collect(Collectors.toList())
                )
            .collect(Collectors.toList());

关于java - 使用 Stream API Java 8 进行嵌套对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841869/

相关文章:

java - 基本ScrollBarUI?如何使用它

lambda - Java 8 中有多个参数的消费者?

java - Spring AOP 表达式中的多个返回类型

java - 获取得分为 "x"分的学生列表 Java8 List<Student> 到 Map<Marks,List<Name>>,限制名称数量

java - 仅当 RecyclerView 可滚动时,如何向 RecyclerView 中的最后一个 View 添加填充?

java - SQLiteOpenHelper 和 SQLiteAssetHelper 之间的区别?

java - 如何使用 for 循环创建表数组?

c# - 使用 lambda 语法覆盖

c# - C# 闭包对内存有什么影响?

java - 使用 java 8 IntStream 以循环方式从给定索引开始迭代列表,并获取与条件匹配的第一个元素的索引