Sorting treemap by values java

How to sort a TreeMap by value in java

A TreeMap is always sorted based on its keys, however if you want to sort it based on its values then you can build a logic to do this using comparator. Below is a complete code of sorting a TreeMap by values.

import java.util.*; class TreeMapDemo < //Method for sorting the TreeMap based on values public static > Map sortByValues(final Map map) < ComparatorvalueComparator = new Comparator() < public int compare(K k1, K k2) < int compare = map.get(k1).compareTo(map.get(k2)); if (compare == 0) return 1; else return compare; >>; Map sortedByValues = new TreeMap(valueComparator); sortedByValues.putAll(map); return sortedByValues; > public static void main(String args[]) < TreeMaptreemap = new TreeMap(); // Put elements to the map treemap.put("Key1", "Jack"); treemap.put("Key2", "Rick"); treemap.put("Key3", "Kate"); treemap.put("Key4", "Tom"); treemap.put("Key5", "Steve"); // Calling the method sortByvalues Map sortedMap = sortByValues(treemap); // Get a set of the entries on the sorted map Set set = sortedMap.entrySet(); // Get an iterator Iterator i = set.iterator(); // Display elements while(i.hasNext()) < Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); >> >
Key1: Jack Key3: Kate Key2: Rick Key5: Steve Key4: Tom

About the Author

I have 15 years of experience in the IT industry, working with renowned multinational corporations. Additionally, I have dedicated over a decade to teaching, allowing me to refine my skills in delivering information in a simple and easily understandable manner.

Comments

Hi,
Here in the above example, after sorting the keys with comparator, you have put the values back in a new Tree HashMap , which will by default sort if by keys.
You should have put them in a LinkedHashMap instead.

Читайте также:  Html img width relative

Источник

Сортировка карты по значениям в Java

В этом посте будут обсуждаться различные методы сортировки карты по значениям в Java, т. е. сортировка карты в соответствии с естественным порядком ее значений.

1. Использование TreeMap

TreeMap представляет собой реализацию на основе красно-черного дерева Map , который сортируется в соответствии с компаратором, переданным его конструктору. Написав пользовательский компаратор в TreeMap , мы можем отсортировать карту в соответствии с естественным порядком ее значений, как показано ниже:

// Пользовательский компаратор для сортировки карты в соответствии с естественным порядком ее значений

результат:

Sorted map by values :

Использование Guava TreeMap :

Библиотека Google Guava также предоставляет TreeMap реализацию, которую мы можем использовать для создания изменяемого пустого TreeMap instance, который сортируется в соответствии с параметром Comparator, переданным его конструктору.

2. Использование LinkedHashMap

LinkedHashMap представляет собой хэш-таблицу и реализацию связанного списка Map интерфейс с предсказуемым порядком итерации, то есть порядком, в котором значения были вставлены в карту. Мы можем использовать это свойство для создания копии карты, отсортированной в соответствии с естественным порядком ее значений.

  1. Создайте список записей карты и отсортируйте их на основе их значений.
  2. Создать пустой LinkedHashMap и для каждой записи карты в отсортированном списке вставьте в него пару ключ-значение.

Результирующий LinkedHashMap будут отсортированы по значениям.

результат:

Sorted map by values :

3. Использование Java 8

Мы также можем использовать Java 8 Stream для сортировки карты по значениям. Ниже приведены шаги:

  1. Получите поток из заданного представления сопоставлений, содержащихся в карте.
  2. Отсортируйте поток в естественном порядке значений, используя Stream.sorted() метод путем передачи компаратора, возвращаемого Map.Entry.comparingByValue() .
  3. Соберите все отсортированные элементы в LinkedHashMap с использованием Stream.collect() с Collectors.toMap() .
Читайте также:  Yandex translator api python

Обратите внимание, что поток — это последовательность элементов, а не последовательность пар ключ/значение. Итак, мы не можем построить карту из потока, не указав, как извлекать из него значения и значения. Java 8 предоставляет Collectors.toMap() метод для этой цели. Нам нужно использовать перегруженную версию toMap() который возвращает LinkedHashMap вместо HashMap чтобы сохранить отсортированный порядок.

Источник

How to Sort a TreeMap by Value in Java with Example

In the last tutorial I have shared TreeMap iterator example. TreeMap is always sorted based on its keys, in this post we will see how to sort it based on the values. We will sort TreeMap based on values using Comparator.Below is the code for sorting TreeMap by values.

import java.util.*; public class TreeMapSortByValue  public static void main(String args[])  // Declaring a TreeMap of String keys and String values TreeMapString, String> treemap = new TreeMapString, String>(); // Add Key-Value pairs to TreeMap treemap.put("Key1", "Pear"); treemap.put("Key2", "Apple"); treemap.put("Key3", "Orange"); treemap.put("Key4", "Papaya"); treemap.put("Key5", "Banana"); //sort treemap by values Map sortedMap = sortByValues(treemap); // Get Set of entries Set set = sortedMap.entrySet(); // Get iterator Iterator it = set.iterator(); // Show TreeMap elements System.out.println("TreeMap contains: "); while(it.hasNext())  Map.Entry pair = (Map.Entry)it.next(); System.out.print("Key is: "+pair.getKey() + " and "); System.out.println("Value is: "+pair.getValue()); > > public static K, V extends ComparableV>> MapK, V> sortByValues(final MapK, V> map)  ComparatorK> valueComparator = new ComparatorK>()  public int compare(K k1, K k2)  int compare = map.get(k1).compareTo(map.get(k2)); if (compare == 0) return 1; else return compare; > >; MapK, V> sortedByValues = new TreeMapK, V>(valueComparator); sortedByValues.putAll(map); return sortedByValues; > > 
TreeMap contains: Key is: Key2 and Value is: Apple Key is: Key5 and Value is: Banana Key is: Key3 and Value is: Orange Key is: Key4 and Value is: Papaya Key is: Key1 and Value is: Pear

About The Author

Subham Mittal has worked in Oracle for 3 years.
Enjoyed this post? Never miss out on future posts by subscribing JavaHungry

Источник

Оцените статью