Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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_Cloudant - Fatal编程技术网

Java 嵌套循环的最佳实践

Java 嵌套循环的最佳实践,java,cloudant,Java,Cloudant,我正在阅读大型Json文件,我想映射文件中的这些对象并将它们插入db中 Json结构 { "A": [ { "key1": "value1", "key2": "value2", "B": [ { "id": "34f852c8-fc51-47aa-ba7f-dd659a4bff3f", "C": [ {

我正在阅读大型Json文件,我想映射文件中的这些对象并将它们插入db中

Json结构

{

"A": [
    {
        "key1": "value1",
        "key2": "value2",
        "B": [
            {
                "id": "34f852c8-fc51-47aa-ba7f-dd659a4bff3f",
                "C": [
                    {
                        "c1": "819685-002",

                    }
                ]
            }
        ]
    },

    {
        "key1": "value1",
        "key2": "value2",
        "B": [
            {
                "id": "34f852c8-fc51-47aa-ba7f-dd659a4bff3f",
                "C": [
                    {
                        "c1": "819685-002",

                    }
                ]
            }
        ]
    }
]
}
该文件包含一个文件的多个块

所以我需要循环三个嵌套循环

For (A){
    for (B){
       FOR (C) {
          // CREATE THE AN OBJECT 
       }
     }
 }

 // Then after the loop insert all objects once
 db.bulk(//List of object created);
该问题需要3分钟才能插入2557条记录


可以做任何增强来增强循环过程吗?

我总是创建模型来将json字符串映射到POJO,这样我就可以灵活地处理它们。例如,对于json部分,我将创建POJO,如下所示:

class Payload {
    private List<Result> A;

    // getters and setters
}


class Result {
    private String key1;
    private String key2;
    private List<Result2> B;

    // getters and setters
}
现在,您可以将有效负载或部分有效负载发送到db


如果您想使用Gson进行映射,那么您需要考虑这一点。

这似乎是一个优化问题。基本上,没有更有效的方法来优化3个嵌套for循环,但是,分析算法结构并重新评估如何分配对象和通过JSON本身进行解析将是更好的攻击策略

也就是说,正如其他人所评论的,有一些工具,比如Jackson,可以帮你做到这一点

这里有一些链接可以帮助您开始使用:



创建对象列表或db.bulk的时间到哪里去了?比如,为什么不使用JSON映射呢?同意Victor的说法。你可以为你的汽车制造自己的车轮,但只买它们更有效。(也就是说,不要重新发明轮子。)@VictorGubin,关键是新的对象结构与Json对象中的不同,这就是为什么我必须循环到them@TonyHopkinson,循环和插入记录您介意将您的答案作为对问题的直接评论吗?也许可以添加标志作为副本?可以,谢谢。编辑:我无法直接对帖子发表评论,因为这是一个新帐户。@sdumont问题是新的对象结构与Json对象中的不同,这就是为什么我必须循环到它们中的原因。谢谢。我是新来的
import com.fasterxml.jackson.databind.ObjectMapper;
// . . . 
ObjectMapper mapper = new ObjectMapper();
Payload payload = mapper.readValue(jsonString, Payload.class);