簡體   English   中英

Java:正確的類型迭代

[英]Java: Correct Iterating through types

        {
           "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" ]
        }

我從Google Maps獲得了此JSON並將其成功轉換為GSON對象:

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

我現在應該如何遍歷我的類型? 我需要將街道,street_number和城鎮分別保存在自己的字段中。 我唯一想到的就是這個,但對我來說看起來並不正確/很好:

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

當然,還要遍歷每個address_component。 我該如何做得更好?

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。 服務器中的每一個都有很多,因此最好讓它完成工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM