You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维序列化数据列转换逻辑的Java实现问题

二维数据列转换的循环实现方案

需求说明

需要把序列化的二维数据,从指定原始列数的结构,转换为目标列数的结构,数据量不固定,必须通过循环实现。示例如下:

  • 原始序列化数据:1-1 1-2 1-3 1-4 1-5 2-1 2-2 2-3 2-4 2-5
  • 原始二维结构(5列2行):
    1-1 1-2 1-3 1-4 1-5
    2-1 2-2 2-3 2-4 2-5
    
  • 期望二维结构(3列4行):
    1-1 1-2 1-3
    2-1 2-2 2-3
    
    1-4 1-5
    2-4 2-5
    
  • 期望序列化结果:1-1 1-2 1-3 2-1 2-2 2-3 1-4 1-5 2-4 2-5

原代码问题

你写的代码只处理了每行前MAX_COLUMNS个元素,没有循环处理剩余的列块,导致后半部分数据缺失,输出结果只有[1-1, 1-2, 1-3, 2-1, 2-2, 2-3]。

修正后的代码

import java.util.*;

public class Main {
    static int ORIGINAL_COLUMNS = 5;
    static int TARGET_COLUMNS = 3;
    
    static List<String> serialList = new ArrayList<String>() {{
        add("1-1");
        add("1-2");
        add("1-3");
        add("1-4");
        add("1-5");
        
        add("2-1");
        add("2-2");
        add("2-3");
        add("2-4");
        add("2-5");
    }};
    
    public static void main(String[] args) throws Exception {
        List<String> finalList = new ArrayList<>();
        // 计算原始数据的行数
        int rowCount = serialList.size() / ORIGINAL_COLUMNS;
        
        // 按列块循环:每次处理TARGET_COLUMNS列,直到覆盖所有原始列
        for (int colStart = 0; colStart < ORIGINAL_COLUMNS; colStart += TARGET_COLUMNS) {
            // 每个列块内,遍历所有行,取出对应列范围的元素
            for (int row = 0; row < rowCount; row++) {
                // 当前行的起始索引
                int rowStart = row * ORIGINAL_COLUMNS;
                // 计算当前列块的结束索引(避免超出原始列数)
                int colEnd = Math.min(colStart + TARGET_COLUMNS, ORIGINAL_COLUMNS);
                // 取出当前行当前列块的元素
                for (int col = colStart; col < colEnd; col++) {
                    finalList.add(serialList.get(rowStart + col));
                }
            }
        }
        
        System.out.println(finalList);
    }
}

代码逻辑说明

  1. 先算出原始数据的行数:总数据量除以原始列数,适配任意行数的情况
  2. 外层循环按列块拆分:从第0列开始,每次推进TARGET_COLUMNS列,直到处理完所有原始列
  3. 中层循环遍历每一行,确保每个列块内先收集完所有行的对应元素,再处理下一个列块
  4. 内层循环取出当前行当前列块的元素,用Math.min处理最后一个列块不足目标列数的情况(比如示例里最后一个列块只有2列)
  5. 运行后输出结果:[1-1, 1-2, 1-3, 2-1, 2-2, 2-3, 1-4, 1-5, 2-4, 2-5],完全符合期望

内容的提问来源于stack exchange,提问作者ほたく

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:43:15