Java 变换映射<;列表<;Long>;,列表<;长期>&燃气轮机;串连

Java 变换映射<;列表<;Long>;,列表<;长期>&燃气轮机;串连,java,json,dictionary,serialization,Java,Json,Dictionary,Serialization,我曾尝试使用Gson执行此操作,但您无需运行代码即可看到它没有多大意义: final Map<List<Double>, List<Double>> map = new Gson().fromJson("{[111,222]=[333,444], [555,666]=[777,000]}", Map.class); final Map=new Gson().fromJson(“{[111222]=[333444],[555666]=[777000]}”,Ma

我曾尝试使用Gson执行此操作,但您无需运行代码即可看到它没有多大意义:

final Map<List<Double>, List<Double>> map = new Gson().fromJson("{[111,222]=[333,444], [555,666]=[777,000]}", Map.class);
final Map=new Gson().fromJson(“{[111222]=[333444],[555666]=[777000]}”,Map.class);
我得到一个格式错误的异常。有人知道如何在不创建自定义类的情况下做到这一点吗

它不能与Json相关,也欢迎使用其他方法。它不一定是一个映射,它可以是一个成对的列表,无论如何,我永远不会使用列表作为键进行搜索,我只会迭代它


我期待着阅读您的新想法:)

您的JSON字符串错误有两个原因:

  • 数组不能是键,即
    [555666]
    作为键无效
  • 将键与值关联的符号是
    ,而不是
    =

  • 这有点老套,但可以用作反序列化字符串的方法。 序列化将使用Gson.toJson(map)完成

    final Map Map=new Gson().fromJson(“{\”[1,2,3,5]\”=[4,5,6]}”,Map.class);
    最终映射结果=Maps.newHashMap();
    对于(最终Map.Entry:Map.entrySet()){
    最终列表值=Lists.newArrayList();
    for(最后一个双倍数字:entry.getValue()){
    value.add(number.longValue());
    }
    final List rawKey=new Gson().fromJson(entry.getKey(),List.class);
    final List key=Lists.newArrayList();
    for(最终双精度编号:rawKey){
    key.add(number.longValue());
    }
    结果。输入(键、值);
    }
    系统输出打印项次(结果);
    
    它不是有效的JSON?测试它主要的一点不是使用Json,主要的一点是(反)序列化一个映射(从)到一个字符串。你的字符串格式是固定的吗?不,我只想在最后的对象,字符串也可以看作为一个sha1散列。1。我知道,这就是为什么我建议使用Json的替代方案,并写下“没有多大意义”;2.错了,使用Gson还可以使用=(至少对于映射是这样)。但是如果它不是JSON,它只是一种不存在的格式,因此您必须实现自定义解析,可能是语法或regexp。
        final Map<String, List<Double>> map = new Gson().fromJson("{\"[1,2,3,5]\"=[4,5,6]}", Map.class);
        final Map<List<Long>, List<Long>> result = Maps.newHashMap();
        for (final Map.Entry<String, List<Double>> entry : map.entrySet()) {
            final List<Long> value = Lists.newArrayList();
            for (final Double number : entry.getValue()) {
                value.add(number.longValue());
            }
            final List<Double> rawKey = new Gson().fromJson(entry.getKey(), List.class);
            final List<Long> key = Lists.newArrayList();
            for (final Double number : rawKey) {
                key.add(number.longValue());
            }
            result.put(key, value);
        }
        System.out.println(result);