2015-07-10 96 views
1

我有我的代码中的散列图的ArrayList 我有混淆,我应该使用哪种排序方法? 我的代码如下排序ArrayList <HashMap <字符串,字符串>>使用值

arraylist = new ArrayList<HashMap<String, String>>(); 
      // Retrieve JSON Objects from the given URL address 
      jsonobject = JSONFunctions 
         .getJSONfromURL("https://api.foursquare.com/v2/venues/search? client_id=ACAO2JPKM1MXHQJCK45IIFKRFR2ZVL0QASMCBCG5NPJQWF2G&client_secret=YZCKUYJ1W HUV2QICBXUBEILZI1DMPUIDP5SHV043O04FKBHL&v=20130815&ll=-34.678,138.87&radius=5000&section=coffee"); 

     try { 
      // Locate the array name in JSON 
      jsonarray = jsonobject.getJSONObject("response"); 

      JSONArray jsonSubarray = jsonarray.getJSONArray("venues"); 
      Log.v("Response Array", String.valueOf(jsonSubarray)); 



      for (int i = 0; i < jsonSubarray.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 

       jsonobject = jsonSubarray.getJSONObject(i); 
       // Retrive JSON Objects 
       // Retrive JSON Objects 

       Log.v("Store name", jsonobject.getString("name")); 
       map.put("storeName", jsonobject.getString("name")); 

       JSONObject locationObject = jsonobject.getJSONObject("location"); 
       Log.v("if condition",String.valueOf(locationObject.has("city"))); 
       if(locationObject.has("city")) 
       { 
        map.put("city", locationObject.getString("city")); 
       } 
       else 
        map.put("city","N/A"); 

       double km = Double.valueOf(locationObject.getString("distance"))/1000 ; 
       Log.v("distance", String.valueOf(km)); 
       map.put("distance", String.valueOf(km)); 

       arraylist.add(map); 

      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

这里是我的JSON数据格式

"id": "4e321829d4c00077f657b8ec", 
      "name": "TeAro Estate Wines", 
      "contact": {}, 
      "location": { 
       "lat": -34.670859098532766, 
       "lng": 138.89067804714347, 
       "distance": 2053, 
       "cc": "AU", 
       "city": "Williamstown", 
       "state": "SA", 
       "country": "Australia", 
       "formattedAddress": [ 
        "Williamstown SA", 
        "Australia" 
       ] 
      }, 
      "categories": [ 
       { 
        "id": "4bf58dd8d48988d14b941735", 
        "name": "Winery", 
        "pluralName": "Wineries", 
        "shortName": "Winery", 
        "icon": { 
         "prefix": "https://ss3.4sqi.net/img/categories_v2/food/winery_", 
         "suffix": ".png" 
        }, 
        "primary": true 
       } 
      ], 
     { 
      "id": "4c454825f0bdd13a65c9cacc", 
      "name": "Barossa Dam", 
      "contact": {}, 
      "location": { 
       "address": "Dam it", 
       "lat": -34.645353, 
       "lng": 138.848115, 
       "distance": 4150, 
       "cc": "AU", 
       "city": "Sandy Creek", 
       "state": "SA", 
       "country": "Australia", 
       "formattedAddress": [ 
        "Dam it", 
        "Sandy Creek SA", 
        "Australia" 
       ] 
      }, 

我想距离 对它进行排序,请给我一些建议,我应该用什么方法 我弄糊涂数组列表和哈希映射数组列表 如何使用collection.sort对数据进行排序。

我想根据ArrayList中的值进行排序。

+1

你不能使用TreeMap并获得免费的排序吗? – Bathsheba

+0

我不熟悉TreeMap的概念,但我会研究它 –

+0

为什么使用Hashmap的ArrayList?您可以直接使用ObjectList的ArrayList,其中Object将是一个类(称为场地),并带有两个变量 - > City,Distance。这样,您可以使用Venues类中的Comparator对ArrayList进行排序。否则,正如Bathsheba所说,你可以使用TreeSet。 –

回答

1

使用比较器对其进行排序。

Comparator<HashMap<String, String>> distanceComparator = new Comparator<HashMap<String,String>>() { 

    @Override 
    public int compare(HashMap<String, String> o1, HashMap<String, String> o2) { 
     // Get the distance and compare the distance. 
     Integer distance1 = Integer.parseInt(o1.get("distance")); 
     Integer distance2 = Integer.parseInt(o2.get("distance")); 

     return distance1.compareTo(distance2); 
    } 
}; 

// And then sort it using collections.sort(). 
Collections.sort(arrayList, distanceComparator); 
+0

帮助了很多......现在解决了......谢谢 –

0
Collections.sort(arrayList, (HashMap<String, String> m1, HashMap<String, String> m2) -> 
      Integer.parseInt(m1.get("distance").compareTo(Integer.parseInt(m2.get("distance"))))); 

它的一个想法更简洁使用的Java 1.8和Lambda表达式功能。

相关问题