Sort Map by Value in Java
Tags: Map List LinkedHashMap ArrayList Collections Comparator
In this Java core tutorial, we show you how to implement the Java method to sort elements of a Map object by its entry value in the Java program.
Implement method to sort a map by value
Firstly, create a new class named MapUtils and implement a method sortMapByValue() which expects a Map as argument and returns a sorted Map.
MapUtils.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class MapUtils {
public static Map<String, String> sortMapByValue(Map<String, String> map) {
if(map == null) {
return null;
}
Map<String, String> sortedMap = new LinkedHashMap<>();
List<Map.Entry<String, String>> mapEntryList = new ArrayList<>(map.entrySet());
Collections.sort(mapEntryList, new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Map.Entry<String, String> entry1, Map.Entry<String, String> entry2) {
return entry1.getValue().compareTo(entry2.getValue());
}
});
for (Map.Entry<String, String> entry :mapEntryList) {
sortedMap.put(entry.getKey(), entry.getValue());
}
return sortedMap;
}
}
Using MapUtils.sortMapByValue() method to sort map
In the following example Java program we use the MapUtils.sortMapByValue() static method above to sort a map.
SortMapByValueExample.java
import java.util.LinkedHashMap;
import java.util.Map;
public class SortMapByValueExample {
public static void main(String[] args) {
Map<String, String> sampleMap = new LinkedHashMap<>();
sampleMap.put("value1", "b");
sampleMap.put("value2", "c");
sampleMap.put("value3", "a");
sampleMap.put("value4", "d");
System.out.println("Sample Input Map:");
for (Map.Entry entry: sampleMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
// sort the map
Map<String, String> sortedMap = MapUtils.sortMapByValue(sampleMap);
System.out.println("\nSorted Map:");
for (Map.Entry entry: sortedMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
}
Sample Input Map:
Key: value1, Value: b
Key: value2, Value: c
Key: value3, Value: a
Key: value4, Value: d
Sorted Map:
Key: value3, Value: a
Key: value1, Value: b
Key: value2, Value: c
Key: value4, Value: d
Happy Coding 😊