工作总结—树转二维数组与二维数组的转置

树节点定义

public class Node {
        private String id;
        private String name;
        private String parentId;
        private List<Node> children;
        private String index;
        //set and get 方法
      }

树转嵌套集合

    public static List<List<String>> flatten(List<Node> list, List<List<String>> values, List<String> temp) {
        for (Node item : list) {
            if (item.children == null || item.children.size() == 0) {
                List<String> tmp = new ArrayList<>(temp);
                tmp.add(item.name);
                values.add(tmp);
            } else {
                temp.add(item.name);
                flatten(item.children, values, temp);
            }
        }
        temp.clear();
        return values;
    }

嵌套集合转数组

public static String[][] treeToArray(List<List<String>> flatten) {
        int max = 0;
        for (List<String> v : flatten) {
            int size = v.size();
            if (size >= max) {
                max = size;
            }
        }
        String[][] vs = new String[flatten.size()][max];
        AtomicInteger index = new AtomicInteger(0);
        flatten.forEach(v -> {
            AtomicInteger index2 = new AtomicInteger(0);
            v.forEach(v2 -> {
                vs[index.get()][index2.get()] = v2;
                index2.getAndIncrement();
            });
            index.getAndIncrement();
        });
        return vs;
    }

二维数组转置

  public static String[][] transpose(String[][] vs) {
        String[][] vs2 = new String[vs[0].length][vs.length];
        for (int i = 0; i < vs.length; i++) {
            for (int j = 0; j < vs[i].length; j++) {
                String value = vs[i][j];
                if (Objects.isNull(value)) {
                    vs2[j][i] = vs[i][j - 1];
                } else {
                    vs2[j][i] = value;
                }
            }
        }
        return vs2;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值