未知循环层数的递归处理

256 阅读1分钟

7396ad163c6e46b9ae911cc2e2e5fa13_tplv-k3u1fbpfcp-watermark.webp
本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

       最近遇到一个问题,当你不知道你需要进行几层循环来处理你的数据时,该怎么办?例如,你要构建一个表格,但是你只得到一个已经填充好数据的list,却并不知道需要构建的表格是几行几列。
       这种场景还是比较常见的,本文纯粹是抛砖引玉,给大家提供下思路,欢迎留言大家讨论~

解决方案

       处理的主要逻辑就是,采用递归的方法,遍历list的下标。

闲话不多说,附上代码:

public class TestMultiRound {

    /**
     * 多重列表循环处理
     * 
     * @param dataList 数据源
     * @param temp 临时参数,用来拼接数据
     * @param index 列表下标
     * @return Feed配置列表
     */
    public static String multiRound(List<List<String>> dataList, String temp, int index) {
        // 第一层List已遍历结束
        if (index >= dataList.size()) {
            return "";
        }

        // 最终结果
        StringBuilder out = new StringBuilder();
        String tmp = "";
        // 根据index下标,获取对应的第二层List的元素
        List<String> data = dataList.get(index);
        // 遍历第二次List的元素
        for (int i = 0; i < data.size(); i++) {
            tmp = data.get(i) + "/";
            
            // 通过递归的方式,循环遍历其它第二层List的同层元素
            if (index < dataList.size()) {
                out.append(multiRound(dataList, temp + tmp, index + 1));
            }
            // 第一层列表遍历结束后,直接输出日志
            if (index == dataList.size() - 1) {
                out.append(temp).append(tmp).append("\n");
            }
        }

        return out.toString();
    }
    
    public static void main(String[] args) {
        // 测试数据源
        List<List<String>> dataList = new ArrayList<List<String>>();

        List<String> aaa = new ArrayList<String>();
        aaa.add("111");
        aaa.add("222");
        aaa.add("333");
        dataList.add(aaa);

        aaa = new ArrayList<String>();
        aaa.add("aaa");
        aaa.add("bbb");
        aaa.add("ccc");
        aaa.add("ddd");
        dataList.add(aaa);

        aaa = new ArrayList<String>();
        aaa.add("+++");
        aaa.add("---");
        aaa.add("...");
        dataList.add(aaa);
        
        // 测试方法,并输出结果
        System.out.println(multiRound(dataList, "", 0));
    }
}

运行结果如下:
这里写图片描述

后言

       既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~