Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的关联性数组_Java_List_Dictionary_Avro - Fatal编程技术网

Java中的关联性数组

Java中的关联性数组,java,list,dictionary,avro,Java,List,Dictionary,Avro,我收到一个列表,其数据内容如下所示(为了清晰起见,使用了JSON符号)。如何使用Java最好地保存这些记录类型 记录1: [ { "serial_no" : "x", "data1" : "d" }, { "serial_no" : "y", "data2" : "d2" }, ............................MANY MORE ] [ { "id"

我收到一个
列表
,其数据内容如下所示(为了清晰起见,使用了JSON符号)。如何使用Java最好地保存这些记录类型

记录1:

   [
    {
      "serial_no" : "x",
      "data1" : "d"
    },
    {
     "serial_no" : "y",
     "data2" : "d2"
    },
    ............................MANY MORE
   ]
   [
    {
      "id":"x",
      "type":"A"
    },
    {
      "id" : "x",
      "type" : "B"
    },
    {
      "id" : "y",
      "type" : "A",
    },
    { 
      "id" : "y",
      "type" : "B"
    } 
   ]
记录2:

   [
    {
      "serial_no" : "x",
      "data1" : "d"
    },
    {
     "serial_no" : "y",
     "data2" : "d2"
    },
    ............................MANY MORE
   ]
   [
    {
      "id":"x",
      "type":"A"
    },
    {
      "id" : "x",
      "type" : "B"
    },
    {
      "id" : "y",
      "type" : "A",
    },
    { 
      "id" : "y",
      "type" : "B"
    } 
   ]
正如您在这里看到的,每个序列号在record2中都有两条记录<记录1中的代码>序列号与记录2中的id相同

我的目标是: 找到这两张唱片的最好方法

解决方案我认为

创建一个类似于

      map.put("x", [map.put("A",List), map.put("B",List)]);
但我觉得,这是一个复杂的结构。因为地图包含地图列表
[每个地图都是地图]

有什么建议吗

编辑


记录中的每个条目都是

看起来好像您正试图使用Java解析JSON。为什么不使用特定的库呢? 像基本的或者谷歌的

否则,我不认为你提议的复杂结构特别缓慢。如果您认为获取数据更有效或更容易,那么可能需要设计自己的对象类来保存数据


编辑

根据你的问题,我假设JSON是你收到的格式,对不起

我只想为GenericRecord创建一个包装器,或者将其子类化。然后添加提取数据所需的方法,或使其具有可比性以进行排序

类似于

public class MyRecord extends GenericRecord implements Comparable<MyRecord>
{
    // Determine the type
    public int getType()
    {
        if ( this.get( "id") != null )
            return 2;
        return 1;
    }
    // Add methods that allow you to retrieve the serial field from any of the two record types
    public String getId()
    {
        if ( this.get( "id") != null )
            return (String)this.get("id");
        return (String)this.get("serial_no");
    }

    // add comparator methods that will allow you to sort the list, compare based on Id, etc
    @Override
    public int compareTo(MyRecord another) 
    {
        // Just a simple example
        return this.getId().compareTo( another.getId() );
    }
}
公共类MyRecord扩展了GenericRecord
{
//确定类型
公共int getType()
{
if(this.get(“id”)!=null)
返回2;
返回1;
}
//添加允许您从两种记录类型中的任何一种检索序列字段的方法
公共字符串getId()
{
if(this.get(“id”)!=null)
返回(字符串)this.get(“id”);
返回(字符串)this.get(“序列号”);
}
//添加comparator方法,允许您对列表进行排序、基于Id进行比较等
@凌驾
公共整数比较(MyRecord另一个)
{
//只是一个简单的例子
将这个.getId().compareTo返回到(另一个.getId());
}
}

为重复输入定义
es:

class SerialNoData {
    String serialNo;
    Object data;
}


);解析后,将实例放入数组或
列表中以获得所需的格式。

地图的复杂程度对速度没有影响。根据您使用的映射类型,获取记录列表的时间是固定的(开销相当小)。在子列表中查找某些内容将是O(n),因为您需要遍历列表并查看所有映射。

定义以下类

class Serial{
 String serial-no;
 String data;
 List<IdType> idTypes;
}

class IdType{
 String id;
 String type;
}
class串行{
字符串序列号;
字符串数据;
列出各种类型;
}
类IdType{
字符串id;
字符串类型;
}

之后,您可以使用jackson或任何类型的JSON处理库。

数据库会很快。为什么会被否决?您没有获得
蓝色注释来指定原因吗?
gson
有两个重载方法
toJson
fromJson
。在我的情况下,两者都没有用。你能详细说明一下吗?你收到的数据是实际的JSON吗?没有。这个答案的列表引起了更多的关注。你能帮我吗?你可能更喜欢连续剧。我更喜欢这个答案,让我试试。没有人。我需要地图上的所有数据。我可以第一次过滤它。因此,只有一个用于循环,然后O(1)用于所有get操作,那么你真的不应该担心速度。即使有1000万个条目,哈希映射查找也需要不到十分之一毫秒的时间。
序列号
不是有效的标识符,而
列表idTypes
用于什么?每个记录1都有多个记录2。这就是为什么我使用列表来包含记录2。我不明白“序列号不是有效的标识符”。作者的意思是,可以使用序列号从
serial
中查找两个对应的
IdType
结构。你不能在变量名中加“-”,我同意你的看法。我们不能在Java代码中使用“-”。但我们可以使用任何JSON库进行映射。(例如:-JsonMapping(“序列号”))