List<Map<String, String>>数据行转列

本文介绍了如何在Java中处理报表需求,通过RowToColumn类的示例展示了如何将接口返回的结果List<Map<String,String>>转换为列格式,以便于数据展示和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报表需求改动需要对接口返回结果List<Map<String, String>>进行行转列,以下为测试demo:

package com.gykjit.spd.system.service.impl;


import java.util.*;

public class RowToColumn {

    public static void main(String[] args) {
        List<Map<String, String>> rows = new ArrayList<>();
        Map<String, String> row1 = new HashMap<>();
        row1.put("Name", "Alice");
        row1.put("Age", "30");
        row1.put("sex", "1");

        Map<String, String> row2 = new HashMap<>();
        row2.put("Name", "Bob");
        row2.put("Age", "25");
        row2.put("sex", "0");
        rows.add(row1);
        rows.add(row2);

        List<Map<String, String>> columns = new ArrayList<>();

        Set<String> keySet = row1.keySet();
        for (String oldKey : keySet) {
            Map<String, String> columnMap = new HashMap<>();
            for (int i = 0; i < rows.size(); i++) {
                final int index = i;
                String columnName = "row_" + index;
                String columnValue = rows.get(index).get(oldKey);
                columnMap.put(columnName, columnValue);
            }
            columns.add(columnMap);
        }
        System.out.println(rows);
        System.out.println(columns);
    }
}


### 将 `Object` 转换为 `List<Map<String, String>>` 为了实现从 `Object` 到 `List<Map<String, String>>` 的转换,通常假设该对象实际上是一个包含映射列表的结构。以下是几种可能的方法来完成这种类型的转换。 #### 方法一:使用反射和类型断言 如果已知输入的对象实际上是 `List<Map<String, Object>>` 或者类似的复杂数据结构,则可以通过强制类型转换以及必要的处理将其转化为目标格式: ```java import java.util.List; import java.util.Map; import java.util.ArrayList; public class Converter { public static List<Map<String, String>> convertToObject(List<?> object) { @SuppressWarnings("unchecked") List<Map<String, ?> > list = (List<Map<String, ?>>) object; List<Map<String, String>> result = new ArrayList<>(); for (Map<String, ?> item : list) { Map<String, String> stringItem = item.entrySet() .stream() .collect(Collectors.toMap( entry -> entry.getKey(), entry -> Objects.toString(entry.getValue(), null) )); result.add(stringItem); } return result; } } ``` 这段代码首先尝试将传入的对象强转成 `List<Map<String, ?>>` 形式,接着利用 Java Stream API 和 `Collectors.toMap()` 来创建新的字符串键值对映射,并最终收集这些映射至一个新的列表中[^1]。 #### 方法二:JSON 序列化/反序列化方法 另一种常见的方式是先将原始对象序列化为 JSON 字符串,再解析回所需的 `List<Map<String, String>>` 结构。这种方法依赖第三方库如 Jackson 或 Gson 进行操作: ```java import com.fasterxml.jackson.databind.ObjectMapper; import org.json.JSONArray; import org.json.JSONObject; // 假设 obj 是要被转化的目标 Object 实例 JSONArray jsonArray = new JSONArray(obj.toString()); List<Map<String, String>> resultList = new ObjectMapper().readValue(jsonArray.toString(), new TypeReference<List<Map<String, String>>>(){}); ``` 此方案适用于当不确定具体内部结构的情况下,但前提是原对象能够正确表示为 JSON 数组形式[^3]。 #### 注意事项 - 上述两种方法都假定给定的对象确实代表了一个有效的 `List<Map<_,_>>` 数据集;如果不是这种情况,则可能会抛出异常或返回意外的结果。 - 如果遇到复杂的嵌套结构或其他特殊情况,可能还需要进一步调整转换逻辑以适应特定需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值