首页 问答 文章
登陆
登陆 注册新账号
注册
已有账号登陆
java stream 转二维结构为树状结构
2019-02-28 18:18:48.0

data每行的个数可以不固定

import java.util.HashMap;
import java.util.Map;
import java.util.function.BinaryOperator;
import java.util.stream.Stream;

public class ToTree {

    public static void main(String[] args) {
        String[][] data = {
            {"A", "1", "i"},
            {"A", "1", "j"},
            {"A", "2", "i"},
            {"A", "2", "j"},
            {"B", "1", "i"},
            {"B", "1", "j"},
            {"B", "2", "i"},
            {"B", "2", "j"}};
        System.out.println(transfer(data));
    }

    public static Map<String, Object> transfer(String[][] data) {
        return Stream.of(data).reduce(new HashMap<>(), (map, keys) -> {
            Stream.of(keys).reduce(map, (m, key) -> {
                if (m.get(key) == null) {
                    m.put(key, new HashMap<>());
                }
                return (Map<String, Object>) m.get(key);
            }, ToTree.emptyCombiner);
            return map;
        }, ToTree.emptyCombiner);
    }

    public static BinaryOperator<Map<String, Object>> emptyCombiner = (m1, m2) -> null;
}

输出 {A={1={i={}, j={}}, 2={i={}, j={}}}, B={1={i={}, j={}}, 2={i={}, j={}}}} 用map作为n叉树。

热门文章
1
input 上传第二次不能选择同一文件
2
input="file" 浏览时只显示指定文件类型 xls、xlsx、csv
3
有时候操作系统的时间与pg的时间不一致
4
java stream 转二维结构为树状结构
5
java Object和Map转化
6
让Node.js项目实现热部署,修改文件避免重启
7
golang  mysql操作
8
BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化)
9
java label
10
java Object和Map转化
最新文章
1
postgresql数据库
2
Mac 启动加载文件位置(可设置环境变量)
3
什么是ORM?
4
微信小程序自定义组件设置回调方法
5
java stream 转二维结构为树状结构
6
正则表达式
7
golang  mysql操作
8
利用Opencv实现简单的图片切割(JAVA)
9
PostgreSQL JSON 数据库
10
linux 自动运行脚本
热门标签
mac
java
jvm
微信小程序
小程序
自定义组件
回调
回调方法
golang
postgresql