Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sorting a List of Map<String, String>

I have a list variable created like this:

List<Map<String, String>> list = new ArrayList<Map<String, String>>();

In my Android application, this list gets populated.

just an example:

Map<String, String> map1 = new HashMap<String, String>(); map.put("name", "Josh"); ...  Map<String, String> map2 = new HashMap<String, String>(); map.put("name", "Anna"); ...  Map<String, String> map3 = new HashMap<String, String>(); map.put("name", "Bernie"); ...  list.add(map1); list.add(map2); list.add(map3); 

I am using list to show results in a ListView by extending BaseAdapter and implementing the various methods.

My problem: I need to sort list in alphabetical order based on the map's key name

Question: What is a simple way to sort list in alphabetical order based on the map's key name?

I can't seem to wrap my head around this. I have extracted each name from each Map into a String array, and sorted it(Arrays.sort(strArray);). But that doesn't preserve the other data in each Map, so i'm not too sure how i can preserve the other mapped values

like image 468
james Avatar asked Mar 01 '11 14:03

james


People also ask

How do I sort a map in collections sort?

Sort HashMap by Values using Comparator Interface After that get the Set of elements from the Map and convert Set into the List. Use the Collections. sort(List) method to sort the list of elements by values by passing customized comparator. Now create a new LinkedHashMap and copy the sorted elements into that.

Can you sort a HashMap based on values?

HashMaps are a good method for implementing Dictionaries and directories. Key and Value can be of different types (eg - String, Integer). We can sort the entries in a HashMap according to keys as well as values.


1 Answers

The following code works perfectly

public Comparator<Map<String, String>> mapComparator = new Comparator<Map<String, String>>() {     public int compare(Map<String, String> m1, Map<String, String> m2) {         return m1.get("name").compareTo(m2.get("name"));     } }  Collections.sort(list, mapComparator); 

But your maps should probably be instances of a specific class.

like image 108
JB Nizet Avatar answered Sep 19 '22 13:09

JB Nizet