DataRow中两个比较特殊的方法put/puts

最后更新:2023-10-18 19:46:39 | 状态:未完成
通常情况下DataRow经常的方法是put(key, value), get(key)
但是在操作复杂数据结构时经常会遇到多层嵌套的情况
比较啰嗦的编码一般会这样
DataRow r0 = new DataRow();
DataRow r1 = new DataRow();
r0.put("r1", r1);
DataRow r2 = new DataRow();
r1.put("r2", r2):

这样反反复复的new  put,不但机械啰嗦,也很容易漏几个put
所以DataRow提供了put(key) puts(key)的方法(注意只有一个key参数没有value)
实际就是把new put合成了一步
DataRow r0 = new DataRow();
DataRow r1 = r0.put("r1");  //这个方法内部实现了r1 = new Row();

同样的
DataSet set = r0.puts("s1");

类似的DataSet也提供了一个无参数的add()
DataRow row = set.add(); //方法内部也实现了new DataRow();并返回

例如要生成以下JSON结构

{
    "analysis": {
      "filter": {
        "us_synonym_filter": {
          "type": "synonym_graph",
          "synonyms_path": "analysis/us_synonym.txt"
        }
      },
      "analyzer": {
        "us_max_word": {
          "tokenizer": "ik_max_word",
          "filter": [
            "us_synonym_filter"
          ]
        },
        "us_smart": {
          "tokenizer": "ik_smart",
          "filter": [
            "us_synonym_filter"
          ]
        }
      }
    }
  }

因为put(k,v)是HashMap的方法返回了Object所以换成set与put作用是一样的

DataRow settings = new DataRow(KeyAdapter.KEY_CASE.SRC);
DataRow analysis = settings.put("analysis");
analysis.put("filter").put("us_synonym_filter").set("type","synonym_graph").set("synonyms_path", "analysis/us_synonym.txt");
DataRow analyzer = analysis.put("analyzer");
analyzer.put("us_max_word").set("tokenizer","ik_max_word").set("filter",new String[]{"us_synonym_filter"});
analyzer.put("ik_smart").set("tokenizer","ik_max_word").set("filter",new String[]{"us_synonym_filter"});


首页 最近更新 搜索 提交 回复