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 如何改进两个Json结果之间的连接?_Java_List_Join_Jackson - Fatal编程技术网

Java 如何改进两个Json结果之间的连接?

Java 如何改进两个Json结果之间的连接?,java,list,join,jackson,Java,List,Join,Jackson,我试图将两个返回JSON的API结果合并到一个对象列表中 目前,我基本上在迭代两个for循环,以匹配每个列表中的条目。有没有更有效的方法?这个过程对我来说太长了 我有以下代码: private List<SingularEntry> combineAdsAndCreatives(JsonNode creativeEntries, JsonNode adEntries) { List<SingularEntry> entries = new ArrayList&

我试图将两个返回JSON的API结果合并到一个对象列表中

目前,我基本上在迭代两个for循环,以匹配每个列表中的条目。有没有更有效的方法?这个过程对我来说太长了

我有以下代码:

private List<SingularEntry> combineAdsAndCreatives(JsonNode creativeEntries, JsonNode adEntries) 
{
     List<SingularEntry> entries = new ArrayList<SingularEntry>();
     for (JsonNode node : adEntries) {
          node = adHashToNode(node, creativeEntries);
          if(node != null)
          {
               entries.add(convertNode(node));
           }
     }
     return entries;  
}

private JsonNode adHashToNode(JsonNode node, JsonNode creativeEntries) 
{
   for(JsonNode creativeNode : creativeEntries)
   {
        if( node.get("campaign_network_id").toString().equals(creativeNode.get("campaign_network_id").toString())    &&                   node.get("ad_network").toString().equals(creativeNode.get("ad_network").toString()) )
         {
           ObjectNode newNode = (ObjectNode) node;
           newNode.put("image_hash", creativeNode.get("image_hash"));
           newNode.put("creative_name", creativeNode.get("creative_name"));
           return newNode;
         }
       }
       return null;  
}
private List combined和creatives(JsonNode creativeEntries、JsonNode adEntries)
{
列表项=新的ArrayList();
for(JsonNode节点:adEntry){
节点=adHashToNode(节点,creativeEntries);
如果(节点!=null)
{
添加(convertNode(node));
}
}
返回条目;
}
私有JsonNode adHashToNode(JsonNode节点,JsonNode creativeEntries)
{
for(JsonNode creativeNode:creativeEntries)
{
if(node.get(“活动网络id”).toString()等于(creativeNode.get(“活动网络id”).toString())和&node.get(“广告网络”).toString().equals(creativeNode.get(“广告网络”).toString())
{
ObjectNode newNode=(ObjectNode)节点;
newNode.put(“image\u hash”,creativeNode.get(“image\u hash”);
newNode.put(“creative_name”,creativeNode.get(“creative_name”);
返回newNode;
}
}
返回null;
}

最好定义一个JsonNodeWrapper类,该类保留JsonNode和define equals()方法(您可能还需要hashCode()方法)以将包装与另一个JsonNode包装进行比较


浏览创建JsonNodeWrappers的两个列表,并将所有创建的列表放在一个集合中,只留下唯一的列表。

有什么区别?它仍然会在两个列表中循环两次,不?不,每个列表循环一次。您发布的代码循环N*M。对于第一个列表中的每个元素,它会循环通过第二个列表。您是否可以显示“然后遍历两个列表”的含义?对于(JsonNode节点:creativeEntries){setInstance.add(新JsonNodeWrapper(节点)}第二个列表也是如此,所以要求初始化image\u hash right?将第一个列表放入集合中。检查第二个列表,并检查每个元素是否存在于集合中。如果存在,则复制image\u hash。如果不存在,则将节点包装器添加到集合中