Prior to Java 8, a Map could be sorted as explained in this article :
How to sort a Map in Java
The below examples demonstrate how we can sort a map in Java 8 using lambda expression and streams. These examples use a Map where country name is key and the name of its capital is the corresponding value.
Sort a Map by key in Java 8
This example sorts the countryCapitalMap in ascending order of keys(country names).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package com.topjavatutorial; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Stream; public class MapSortByKeyExample { public static void main(String[] args) { Map<String, String> countryCapitalMap = new HashMap<String, String>(); countryCapitalMap.put("guyana", "georgetown"); countryCapitalMap.put("nepal", "kathmandu"); countryCapitalMap.put("australia", "canberra"); countryCapitalMap.put("india", "new delhi"); countryCapitalMap.put("japan", "tokyo"); System.out.println("Original Map : \n" + countryCapitalMap); Map<String, String> sortedMap = new LinkedHashMap<String, String>(); Stream<Map.Entry<String, String>> stream = countryCapitalMap.entrySet() .stream(); stream.sorted(Map.Entry.comparingByKey()).forEachOrdered( c -> sortedMap.put(c.getKey(), c.getValue())); System.out.println("Map sorted by key : \n" + sortedMap); } } |
Output:
Original Map :
{guyana=georgetown, japan=tokyo, nepal=kathmandu, australia=canberra, india=new delhi}
Map sorted by key :
{australia=canberra, guyana=georgetown, india=new delhi, japan=tokyo, nepal=kathmandu}
Sort a Map by value in Java 8
This example sorts the countryCapitalMap in ascending order of values(country capital names).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package com.topjavatutorial; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Stream; public class MapSortByValueExample { public static void main(String[] args) { Map<String, String> countryCapitalMap = new HashMap<String, String>(); countryCapitalMap.put("guyana", "georgetown"); countryCapitalMap.put("nepal", "kathmandu"); countryCapitalMap.put("australia", "canberra"); countryCapitalMap.put("india", "new delhi"); countryCapitalMap.put("japan", "tokyo"); System.out.println("Original Map : \n" + countryCapitalMap); Map<String, String> sortedMap = new LinkedHashMap<String, String>(); Stream<Map.Entry<String, String>> stream = countryCapitalMap.entrySet() .stream(); stream.sorted(Map.Entry.comparingByValue()).forEachOrdered( c -> sortedMap.put(c.getKey(), c.getValue())); System.out.println("Map sorted by value : \n" + sortedMap); } } |
Output:
Original Map :
{guyana=georgetown, japan=tokyo, nepal=kathmandu, australia=canberra, india=new delhi}
Map sorted by key :
{australia=canberra, guyana=georgetown, india=new delhi, japan=tokyo, nepal=kathmandu}
Sort a Map by key in reverse order
For sorting a map in reverse order, use Collections.reverseOrder() as shown below :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | package com.topjavatutorial; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Stream; public class MapReverseSortByKeyExample { public static void main(String[] args) { Map<String, String> countryCapitalMap = new HashMap<String, String>(); countryCapitalMap.put("guyana", "georgetown"); countryCapitalMap.put("nepal", "kathmandu"); countryCapitalMap.put("australia", "canberra"); countryCapitalMap.put("india", "new delhi"); countryCapitalMap.put("japan", "tokyo"); System.out.println("Original Map : \n" + countryCapitalMap); Map<String, String> sortedMap = new LinkedHashMap<String, String>(); Stream<Map.Entry<String, String>> stream = countryCapitalMap.entrySet() .stream(); stream.sorted(Collections.reverseOrder(Map.Entry.comparingByKey())) .forEachOrdered(c -> sortedMap.put(c.getKey(), c.getValue())); System.out.println("Map sorted by key in reverse order : \n" + sortedMap); } } |
Output:
Original Map :
{guyana=georgetown, japan=tokyo, nepal=kathmandu, australia=canberra, india=new delhi}
Map sorted by key in reverse order :
{nepal=kathmandu, japan=tokyo, india=new delhi, guyana=georgetown, australia=canberra}
Sort a Map by key in reverse order
Similar to sorting by keys in reverse order, we can use Collections.reverseOrder() to sort the map in reverse order of values.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | package com.topjavatutorial; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Stream; public class MapReverseSortByValueExample { public static void main(String[] args) { Map<String, String> countryCapitalMap = new HashMap<String, String>(); countryCapitalMap.put("guyana", "georgetown"); countryCapitalMap.put("nepal", "kathmandu"); countryCapitalMap.put("australia", "canberra"); countryCapitalMap.put("india", "new delhi"); countryCapitalMap.put("japan", "tokyo"); System.out.println("Original Map : \n" + countryCapitalMap); Map<String, String> sortedMap = new LinkedHashMap<String, String>(); Stream<Map.Entry<String, String>> stream = countryCapitalMap.entrySet() .stream(); stream.sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) .forEachOrdered(c -> sortedMap.put(c.getKey(), c.getValue())); System.out.println("Map sorted by value in reverse order : \n" + sortedMap); } } |
Output:
Original Map :
{guyana=georgetown, japan=tokyo, nepal=kathmandu, australia=canberra, india=new delhi}
Map sorted by value in reverse order :
{japan=tokyo, india=new delhi, nepal=kathmandu, guyana=georgetown, australia=canberra}
© 2016, www.topjavatutorial.com. All rights reserved. On republishing this post, you must provide link to original post
#
#
#