java - How to sort List of Map String in ascending order -


i have list of hashmap , want sort in ascending order in java.

i using custom comparator implement logic, failing. grouping list based on map keys. not sorting list entirely.

my code looks like-

public class listmap {      public static void main(string[] args) {         calendar cal = calendar.getinstance();         list<hashmap<string, string>> list = new arraylist<>();         (int = 0; < 20; i++) {             int value = randint(1, 20);             long timeinmillis = cal.gettimeinmillis();             hashmap<string, string> mp = new hashmap<>();             mp.put("" + value, "values" + value + ":" + timeinmillis);             list.add(mp);         }          collections.sort(list, new comparator<map<string, string>>() {             @override             public int compare(map<string, string> map1,                     map<string, string> map2) {                 string val1 = "";                 string val2 = "";                 (map.entry<string, string> entry : map1.entryset()) {                     val1 = entry.getkey();                 }                 (map.entry<string, string> entry : map2.entryset()) {                     val2 = entry.getkey();                 }                 return val1.compareto(val2);             }         });          (map<string, string> hashmap : list) {             (map.entry<string, string> entry : hashmap.entryset()) {                 system.out.println(entry.getkey() + "/" + entry.getvalue());             }         }      }      public static int randint(int min, int max) {         random rand = new random();         int randomnum = rand.nextint((max - min) + 1) + min;          return randomnum;     }  } 

it prints output-

10/values10:1437660285301 11/values11:1437660285301 11/values11:1437660285301 11/values11:1437660285301 13/values13:1437660285301 13/values13:1437660285301 15/values15:1437660285301 15/values15:1437660285301 15/values15:1437660285301 16/values16:1437660285301 17/values17:1437660285301 18/values18:1437660285301 18/values18:1437660285301 19/values19:1437660285301 19/values19:1437660285301 2/values2:1437660285301 3/values3:1437660285301 4/values4:1437660285301 6/values6:1437660285301 6/values6:1437660285301 

it groups values key, want entire sorted list in above example.

i expecting 2 , 3, 4 , go on.

you're comparing based on keys of type string. comparison done lexicographically, i.e. 12 less 2.

you need compare keys integers in comparator:

collections.sort(list, new comparator<map<string, string>>() {     @override     public int compare(map<string, string> map1,              map<string, string> map2) {         string val1 = "";         string val2 = "";         (map.entry<string, string> entry : map1.entryset()) {             val1 = entry.getkey();         }         (map.entry<string, string> entry : map2.entryset()) {             val2 = entry.getkey();         }          return integer.valueof(val1).compareto(integer.valueof(val2));     } }); 

Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -

Nuget pack csproj using nuspec -