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
Post a Comment