1

I have ArrayList of Hashmap in my code i have confusion that which sort method should i use? my code is as following

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;
    }

And here is my JSON data format

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

I want to sort it by distance please give me some advice of what approach should i use I get confused with array list and array list of hash map how can i use collection.sort to sort my data.

I want to sort on the basis of a value in the ArrayList.

3
  • 1
    Can't you use a TreeMap and get sorting for free? Commented Jul 10, 2015 at 14:00
  • i am not familiar with the concept of TreeMap but i will look into it Commented Jul 10, 2015 at 14:01
  • Why are you using ArrayList of Hashmap? You can directly use ArrayList of Object, where Object will be of a class (called venues maybe) with two variables -> City, Distance. This way you can sort the ArrayList using a Comparator in the Venues class using anyway you can. Or else, as Bathsheba mentioned, you can use TreeSet. Commented Jul 10, 2015 at 14:08

2 Answers 2

2

Use a Comparator to sort it.

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);
Sign up to request clarification or add additional context in comments.

Comments

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

Its one idea more concise to use java 1.8 and the Lambda expression feature.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.