Sort Map elements in java Map<String, List<String>> in reverseorder -


in java program, getting result like

output:

acre care race

act cat

expected:

act cat

acre care race

now want sort map elements in reverse order. can result above. added code in below.

public static void main(string args[]) {      try {         scanner sc = readwords();         map<string, list<string>> wordanagrampairs = new hashmap<>();         wordanagrampairs = mapanagrams(sc);         comparator<list<string>> c = (l1, l2) -> {             collections.sort(l1);             collections.sort(l2);             int in = l1.get(0).length() - l2.get(0).length();             if (in == 0) {                 return string.join(" ", l1).compareto(string.join(" ", l2));             } else {                 return in;             }         };         list<list<string>> sortedlist = wordanagrampairs.values()                 .stream()                 .filter(li -> li != null && li.size() > 1)                 .sorted(c)                 .collect(collectors.tolist());          for(list<string> anagrams : sortedlist){             for(string anagram : anagrams){                 system.out.print(anagram + " ");             }             system.out.print('\n');         }      } catch (filenotfoundexception e) {         system.out.println("file not found");     } } 

by looking @ expected output, seems need sort length of list element , sorted list elements if length equal

to compare element length , list elements

comparator<list<string>> c = (l1, l2) -> {             collections.sort(l1); // elements sorted             collections.sort(l2); // elements sorted             int in = l1.get(0).length() - l2.get(0).length();             if (in == 0) {                 return string.join(" ", l1).compareto(string.join(" ", l2));             } else {                 return in;             }         }; 

since want values printed can use stream on values

    map<string, list<string>> wordanagrampairs = new hashmap<>();     wordanagrampairs.put("race", arrays.aslist("race", "care", "acre"));     wordanagrampairs.put("act", arrays.aslist("act", "cat"));     wordanagrampairs.values().stream()                              .filter(li -> li != null && li.size() > 1)                              .sorted(c)                              .foreach(system.out::println); 

output

[act, cat] [acre, care, race] 

to collect sorted results

    list<list<string>> sortedlist = wordanagrampairs.values().stream().filter(li -> li != null && li.size() > 1).sorted(c)             .collect(collectors.tolist());      system.out.println(sortedlist); 

you can use treemap<string, treeset<string>> sort map key , sort values set value

to sort key

    wordanagrampairs.entryset()                     .stream()                     .filter(e -> e.getvalue().size() > 1)                     .sorted(map.entry.comparingbykey())                     .foreach(system.out::println); 

Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -