$show=/label

Java Map Sort By Values - Sort TreeMap Or HashMap By Value + Java 8

SHARE:

A quick program guide to sort Map by its values. Usually, TreeMap does sort based on the keys but it doesn't provide sorting based on the values. Example programs on sorting HashMap or TreeMap by value.

1. Introduction


In this article, We'll learn how to sort Map by Values in ascending or descending order. In the previous article discussed how to sort the TreeMap in ascending or reverse order.

Map can be anything such as HashMap or TreeMap which needs to be sorted based on its values rather than keys.

Always, TreeMap does sorting based on its keys but not on values, but in the interview first, they will ask how to sort the Map. If you give the answer then the next question is on sorting values alone.



2. Custom comparator Sorting based on Value


First, let us create a custom comparator which sorts based on the values instead of keys. The below method takes Map as an argument and writes a logic for the custom comparator. This comparator logic gets the corresponding value for a key from the map passed as an argument and compares against values.

Finally, Create a new TreemMap and pass the custom value comparator to this new map. Add all values from the map passed to the new TreeMap created.

public static > Map sortByValues(final Map map) {

  // custom comparator based don values.
  Comparator valueComparator = new Comparator() {
   public int compare(K k1, K k2) {
    V v1 = map.get(k1);
    V v2 = map.get(k2);
    int compare = v1.compareTo(v2);
    if (compare == 0) {
     return 1;
    } else {
     return compare;
    }

   }
  };

  // Creating a new TreeMap
  Map sortedByValues = new TreeMap(valueComparator);
  sortedByValues.putAll(map);
  return sortedByValues;
 }

But, Here need to have noted on the point is that directly we can not sort the original TreeMap upon values. We need to create a new TreeMap with a custom comparator.

3. TreeMap sort by value


Now let us create a TreeMap and add a few values to it. Call the above sortByValues() method by passing the map.


package com.java.w3schools.blog.treemap;

import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

public class TreeMapSortByValue {
 public static void main(String args[]) {

  TreeMap treemap = new TreeMap();

  treemap.put("3 IN", "India");
  treemap.put("1 US", "United States");
  treemap.put("2 AUS", "Australia");
  treemap.put("5 PAK", "Pakistan");
  treemap.put("4 UK", "United Kingdom");

  System.out.println("Treemap before sorting : " + treemap);

  // sort treemap by values
  Map sortedMap = sortByValues(treemap);

  System.out.println("Treemap after sorting : " + sortedMap);

 }

 public static > Map sortByValues(final Map map) {

  // custom comparator based don values.
  Comparator valueComparator = new Comparator() {
   public int compare(K k1, K k2) {
    V v1 = map.get(k1);
    V v2 = map.get(k2);
    int compare = v1.compareTo(v2);
    if (compare == 0) {
     return 1;
    } else {
     return compare;
    }

   }
  };

  // Creating a new TreeMap
  Map sortedByValues = new TreeMap(valueComparator);
  sortedByValues.putAll(map);
  return sortedByValues;
 }
}

Output:

Treemap before sorting : {1 US=United States, 2 AUS=Australia, 3 IN=India, 4 UK=United Kingdom, 5 PAK=Pakistan}
Treemap after sorting : {2 AUS=Australia, 3 IN=India, 5 PAK=Pakistan, 4 UK=United Kingdom, 1 US=United States}

4. Sort HashMap By Value


Now, We write a logic to sort hashmap by value. The same logic works for HashMap as well. Just need to pass the HashMap object to the sortByValues() method.

Map hashMapObject = new HashMap();

hashMapObject.put("1", "One");
hashMapObject.put("2", "Two");
hashMapObject.put("3", "Three");
hashMapObject.put("4", "Four");
hashMapObject.put("5", "FIve");

System.out.println("HashMap before sorting : " + hashMapObject);

// sort treemap by values
Map sortedHashMap = sortByValues(hashMapObject);

System.out.println("HashMap after sorting : " + sortedHashMap);

Output:

HashMap before sorting : {1=One, 2=Two, 3=Three, 4=Four, 5=FIve}
HashMap after sorting : {5=FIve, 4=Four, 1=One, 3=Three, 2=Two}

5. Java 8 Sort By Value


Java 8 Stream API has support to sort by key for a Map.

stream(): converts the keys set into Stream<Entry<K, V>
sorted(Map.Entry.comparingByValue()): Sorts the entry set by value using comparingByValue() comparator.
Collectors.toMap(): Collects the output into map.

collect() method is part of the Terminal Operations.

// java 8 sorting

Map java8HashMapApproach = hashMapObject.entrySet().stream()
  .sorted(Map.Entry.comparingByValue())
  .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));

System.out.println("Java 8 HashMap : " + java8HashMapApproach);

Map java8TreeMapApproach = treemap.entrySet().stream().sorted(Map.Entry.comparingByValue())
  .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));

System.out.println("Java 8 TreeMap : " + java8TreeMapApproach);

Output:

Java 8 HashMap : {5=FIve, 4=Four, 1=One, 3=Three, 2=Two}
Java 8 TreeMap : {2 AUS=Australia, 3 IN=India, 5 PAK=Pakistan, 4 UK=United Kingdom, 1 US=United States}

6. Conclusion


In this article, We've seen how to sort TreeMap or HashMap by value instead of key, TreeMap sorts by key by default. And seen how to build the custom comparator to sort by value.

GitHub Code

StackOverFlow

COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,16,Arrays,7,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,5,Collections,22,Collector,1,Command Line,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,81,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,4,Dictionary,1,Difference,1,Download,1,Eclipse,2,Efficiently,1,Error,1,Errors,1,Exception,1,Exceptions,3,Fast,1,Files,9,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,4,Grant,1,Grep,1,HashMap,1,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,5,Iterate,2,Jackson API,3,Java,29,Java 10,1,Java 11,5,Java 12,5,Java 13,2,Java 14,2,Java 8,66,Java 8 Difference,2,Java 8 Stream Conversions,2,java 8 Stream Examples,3,Java 9,1,Java Conversions,11,Java Design Patterns,1,Java Files,1,Java Program,2,Java Programs,65,java.lang,5,java.util. function,1,jQuery,1,Kotlin,10,Kotlin Conversions,3,Kotlin Programs,6,Lambda,1,lang,29,Leap Year,1,live updates,1,Logging,1,Mac OS,2,Math,1,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,1,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,21,String,58,String Programs,9,String Revese,1,Swing,1,System,1,Tags,1,Threads,10,Tomcat,1,Tomcat 8,1,Troubleshoot,16,Unix,2,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: Java Map Sort By Values - Sort TreeMap Or HashMap By Value + Java 8
Java Map Sort By Values - Sort TreeMap Or HashMap By Value + Java 8
A quick program guide to sort Map by its values. Usually, TreeMap does sort based on the keys but it doesn't provide sorting based on the values. Example programs on sorting HashMap or TreeMap by value.
JavaProgramTo.com
https://www.javaprogramto.com/2020/04/java-map-sort-by-value.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2020/04/java-map-sort-by-value.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content