Java:通过类型更正迭代

时间:2014-07-24 20:11:45

标签: java android json

        {
           "long_name" : "1",
           "short_name" : "1",
           "types" : [ "street_number" ]
        },
        {
           "long_name" : "ABC Street",
           "short_name" : "ABC Street",
           "types" : [ "route" ]
        },
        {
           "long_name" : "ABC Town",
           "short_name" : "ABC",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "ABC Area",
           "short_name" : "ABCA",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "ABC L",
           "short_name" : "ABCL",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "Country",
           "short_name" : "CT",
           "types" : [ "country", "political" ]
        },
        {
           "long_name" : "1234",
           "short_name" : "1234",
           "types" : [ "postal_code" ]
        }

我从谷歌地图获得此JSON并成功将其转换为GSON对象:

class address_component{
    public String long_name;
    public String short_name;
    public String[] types;
}

我现在应该如何遍历我的类型?我需要将街道,街道编号和城镇分别保存在自己的土地上。我唯一想到的就是这个,但它看起来不对我好:

if (types.contains("street_number")) {
   street_number = short_name
} else if (types.contains("route")) {
   street = short_name
}

当然循环遍历每个address_component。我怎样才能做得更好?

1 个答案:

答案 0 :(得分:0)

types数组每个都有一个或两个记录长,而您只需要查找三种数据类型。你的方法有一些浪费的努力,但目前形式的contains(String)事情并没有浪费太多的努力,因为数字太小了。

避免不必要工作的一个显而易见的方法是在找到街道后停止进行进一步的contains("street")检查,对其他字段也是如此。这可能是一个简单的额外条件:

if (street_number == null && types.contains("street_number")) {
  street_number = short_name
} else if (street == null && types.contains("route")) {
  street = short_name 
}

你没有发布足够的代码来告诉你在大局中做了什么。我看到两个潜在的问题,其成本比你要问的if-contains-else-if-contains部分要大得多。

  1. 您在搜索数据时迭代七个(或更多)这些地址类型记录。你有break迭代一旦你有你需要的三个项目,并跳过可能有更多的address_type吗?
  2. 您的代码在开始处理之前是否在内存中加载了整个JSON结构,还是采用了流媒体方法?
  3. 最重要的是要仔细查看您查询的API文档。如果有办法告诉服务器您正在寻找哪些数据类型,那么服务器可以从响应中过滤掉您不需要的所有内容。你仍然会迭代,但你不会丢弃这么多数据。这节省了移动设备上的带宽,内存和CPU。服务器中的每一个都有很多,所以最好让它完成工作。