Java sort a linkedhashmap

Java – How to sort LinkedHashMap by its Keys ?

1. Sorting LinkedHashMap in ascending order of Keys :

  • LinkedHashMap maintains insertion-order of keys
  • For Ascending order sorting, pass LinkedHashMap entries as constructor-argument to TreeMap class’ inter-conversion constructor
  • In below illustration, we will sort/convert LinkedHashMap into natural-ordering of keys
  • Syntax :-
// convert to TreeMap Map ts = new TreeMap(linkMap);

SortingLinkedHashMapInAscOrder.java

package in.bench.resources.collection; import java.util.LinkedHashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class SortingLinkedHashMapInAscOrder < public static void main(String[] args) < // 1. create LinkedHashMap object of type LinkedHashMap linkMap = new LinkedHashMap(); // 1.1 adding key-value pairs to LinkedHashMap object linkMap.put("Microsoft", "Bill Gates"); linkMap.put("Apple Inc", "Steve Jobs"); linkMap.put("Google", "Sundar Pichai"); linkMap.put("LinkedIn", "Reid Hoffman"); linkMap.put("Facebook", "Mark Zuckerberg"); // 1.2 Insertion-Order iterating System.out.println("Before Sorting : Insertion-Order \n"); // 1.3 getting keySet() into Set Set set = linkMap.keySet(); // 1.4 get Iterator from key set Iterator itr = set.iterator(); // 1.5 iterating in Insertion-order while(itr.hasNext()) < String key = itr.next(); System.out.println("Key : " + key + "\t\t" + "Value : " + linkMap.get(key)); >// 2. After Sorting : Ascending order System.out.println("\n\n\nAfter Sorting : Ascending-Order\n"); // 2.1 convert to TreeMap Map ts = new TreeMap(linkMap); // 2.2 iterate - ascending order of keys for(String strKey : ts.keySet()) < System.out.println("Key : " + strKey + "\t\t" + "Value : " + linkMap.get(strKey)); >> >
Before Sorting : Insertion-Order Key : Microsoft Value : Bill Gates Key : Apple Inc Value : Steve Jobs Key : Google Value : Sundar Pichai Key : LinkedIn Value : Reid Hoffman Key : Facebook Value : Mark Zuckerberg After Sorting : Ascending-Order Key : Apple Inc Value : Steve Jobs Key : Facebook Value : Mark Zuckerberg Key : Google Value : Sundar Pichai Key : LinkedIn Value : Reid Hoffman Key : Microsoft Value : Bill Gates

2. Sorting LinkedHashMap in descending order of keys :

  • LinkedHashMap maintains insertion-order of keys
  • Descending order :- Implement Comparator interface while creating new TreeMap by providing reverse sorting logic
  • Finally put all entries of LinkedHashMap into TreeMap class using putAll() method
  • In below illustration, we will sort/convert LinkedHashMap into reverse-ordering of keys
  • Syntax :-
// convert to TreeMap // descending or reverse-order sorting logic Map tMap = new TreeMap( new Comparator() < @Override public int compare(String str1, String str2) < return str2.compareTo(str1); >>); // put all key-value into TreeMap tMap.putAll(linkMap);

SortingLinkedHashMapInDesOrder.java

package in.bench.resources.collection; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class SortingLinkedHashMapInDesOrder < public static void main(String[] args) < // 1. create LinkedHashMap object of type LinkedHashMap linkMap = new LinkedHashMap(); // 1.1 adding key-value pairs to LinkedHashMap object linkMap.put("Microsoft", "Bill Gates"); linkMap.put("Apple Inc", "Steve Jobs"); linkMap.put("Google", "Sundar Pichai"); linkMap.put("LinkedIn", "Reid Hoffman"); linkMap.put("Facebook", "Mark Zuckerberg"); // 1.2 Insertion-Order iterating System.out.println("Before Sorting : Insertion-Order \n"); // 1.3 getting keySet() into Set Set set = linkMap.keySet(); // 1.4 get Iterator from key set Iterator itr = set.iterator(); // 1.5 iterating in insertion-order while(itr.hasNext()) < String key = itr.next(); System.out.println("Key : " + key + "\t\t" + "Value : " + linkMap.get(key)); >// 2. After Sorting : Descending order System.out.println("\n\n\nAfter Sorting : Descending-Order\n"); // 2.1 descending or reverse-order sorting logic Map tMap = new TreeMap( new Comparator() < @Override public int compare(String str1, String str2) < return str2.compareTo(str1); >>); // 2.2 put all key-value into TreeMap tMap.putAll(linkMap); // 2.3 iterate - descending order of keys for(String strKey : tMap.keySet()) < System.out.println("Key : " + strKey + "\t\t" + "Value : " + linkMap.get(strKey)); >> >
Before Sorting : Insertion-Order Key : Microsoft Value : Bill Gates Key : Apple Inc Value : Steve Jobs Key : Google Value : Sundar Pichai Key : LinkedIn Value : Reid Hoffman Key : Facebook Value : Mark Zuckerberg After Sorting : Descending-Order Key : Microsoft Value : Bill Gates Key : LinkedIn Value : Reid Hoffman Key : Google Value : Sundar Pichai Key : Facebook Value : Mark Zuckerberg Key : Apple Inc Value : Steve Jobs

Important points to remember about Map :

  • https://docs.oracle.com/javase/tutorial/collections/intro/
  • https://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html
  • https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html
  • https://docs.oracle.com/javase/tutorial/collections/interfaces/list.html
  • https://docs.oracle.com/javase/tutorial/collections/implementations/list.html
  • https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
  • https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
  • https://docs.oracle.com/javase/tutorial/collections/interfaces/set.html
  • https://docs.oracle.com/javase/7/docs/api/java/util/Set.html
  • https://docs.oracle.com/javase/7/docs/api/java/util/class-use/HashSet.html
  • https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html
  • http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html
  • https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html
Читайте также:  Определите сумму всех элементов последовательности завершающейся числом 0 питон

Happy Coding !!
Happy Learning !!

Источник

Сортировка карты по значениям в 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() .

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

Источник

Java – How to sort LinkedHashMap by its Values ?

1. Sorting LinkedHashMap in ascending order of values :

1.1 Ascending-order sorting steps :-

  1. get entrySet() from Map
  2. create/convert entry set into List of entries
  3. sort converted List using Collections class’ sort(); method by implementing Comparator for natural-ordering by its Values
  4. clear original LinkedHashMap using clear(); method
  5. Iterate List and add entries to original LinkedHashMap, after clearing
  6. finally print Map.Entry in console

1.2 Sorting LinkedHashMap by its values in ascending-order :

  • LinkedHashMap maintains insertion-order of keys
  • In below illustration, we will sort/convert LinkedHashMap into natural-ordering of values i.e.; ascending-order of values

SortingLinkedHashMapInAscOrderByValues.java

package in.bench.resources.collection; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class SortingLinkedHashMapInAscOrderByValues < public static void main(String[] args) < // create LinkedHashMap object of type Map linkMap = new LinkedHashMap(); // adding key-value pairs to LinkedHashMap object linkMap.put("Google", "Sundar Pichai"); linkMap.put("Facebook", "Mark Zuckerberg"); linkMap.put("LinkedIn", "Reid Hoffman"); linkMap.put("Apple Inc", "Tim Cook"); linkMap.put("Microsoft", "Bill Gates"); linkMap.put("Amazon", "Jeff Bezos"); linkMap.put("Oracle", "Larry Ellison"); System.out.println("Before Sorting by Values -" + " as per insertion-order : \n"); // iterate original LinkedHashMap for(Map.Entry lhmap : linkMap.entrySet()) < System.out.println("Key : " + lhmap.getKey() + "\t\t" + "Value : " + lhmap.getValue()); >// 1. get entrySet from LinkedHashMap object Set companyFounderSet = linkMap.entrySet(); // 2. convert LinkedHashMap to List of Map.Entry List companyFounderListEntry = new ArrayList( companyFounderSet); // 3. sort list of entries using Collections class' // utility method sort(ls, cmptr) Collections.sort(companyFounderListEntry, new Comparator() < @Override public int compare(Entryes1, Entry es2) < return es1.getValue().compareTo(es2.getValue()); >>); // 4. clear original LinkedHashMap linkMap.clear(); // 5. iterating list and storing in LinkedHahsMap for(Map.Entry map : companyFounderListEntry) < linkMap.put(map.getKey(), map.getValue()); >System.out.println("\n\nSorted LinkedHashMap by its Values" + " in ascending-order\n"); // 6. iterate LinkedHashMap to retrieved stored values for(Map.Entry lhmap : linkMap.entrySet()) < System.out.println("Key : " + lhmap.getKey() + "\t\t" + "Value : " + lhmap.getValue()); >> >
Before Sorting by Values - as per insertion-order : Key : Google Value : Sundar Pichai Key : Facebook Value : Mark Zuckerberg Key : LinkedIn Value : Reid Hoffman Key : Apple Inc Value : Tim Cook Key : Microsoft Value : Bill Gates Key : Amazon Value : Jeff Bezos Key : Oracle Value : Larry Ellison Sorted LinkedHashMap by its Values in ascending-order Key : Microsoft Value : Bill Gates Key : Amazon Value : Jeff Bezos Key : Oracle Value : Larry Ellison Key : Facebook Value : Mark Zuckerberg Key : LinkedIn Value : Reid Hoffman Key : Google Value : Sundar Pichai Key : Apple Inc Value : Tim Cook

2. Sorting LinkedHashMap in descending order of Values :

2.1 Descending-order sorting steps :-

  1. get entrySet() from Map
  2. create/convert entry set into List of entries
  3. sort converted List using Collections class’ sort(); method by implementing Comparator for reverse sorting logic by its Values
  4. clear original LinkedHashMap using clear(); method
  5. Iterate List and add entries to original LinkedHashMap, after clearing
  6. finally print Map.Entry in console

2.2 Sorting LinkedHashMap by its values in descending-order :

  • LinkedHashMap maintains insertion-order of keys
  • In below illustration, we will sort/convert LinkedHashMap into reverse-ordering of Values i.e.; descending-order of values

SortingLinkedHashMapInDesOrderByValues.java

package in.bench.resources.collection; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; public class SortingLinkedHashMapInDesOrderByValues < public static void main(String[] args) < // creating LinkedHashMap object of type Map linkMap = new LinkedHashMap(); // adding key-value pairs to LinkedHashMap object linkMap.put("Google", "Sundar Pichai"); linkMap.put("Facebook", "Mark Zuckerberg"); linkMap.put("LinkedIn", "Reid Hoffman"); linkMap.put("Apple Inc", "Tim Cook"); linkMap.put("Microsoft", "Bill Gates"); linkMap.put("Amazon", "Jeff Bezos"); linkMap.put("Oracle", "Larry Ellison"); System.out.println("Before Sorting by Values -" + " as per insertion-order : \n"); // iterate original LinkedHashMap for(Map.Entry lhmap : linkMap.entrySet()) < System.out.println("Key : " + lhmap.getKey() + "\t\t" + "Value : " + lhmap.getValue()); >// 1. get entrySet from LinkedHashMap object Set companyFounderSet = linkMap.entrySet(); // 2. convert LinkedHashMap to List of Map.Entry List companyFounderListEntry = new ArrayList( companyFounderSet); // 3. sort list of entries using Collections class' // utility method sort(ls, cmptr) Collections.sort(companyFounderListEntry, new Comparator() < @Override public int compare(Entryes1, Entry es2) < return es2.getValue().compareTo(es1.getValue()); >>); // 4. clear original LinkedHashMap linkMap.clear(); // 5. iterating list and storing in LinkedHahsMap for(Map.Entry map : companyFounderListEntry) < linkMap.put(map.getKey(), map.getValue()); >System.out.println("\n\nSorted LinkedHashMap by its Values" + " in descending-order\n"); // 6. iterate LinkedHashMap to retrieved stored values for(Map.Entry lhmap : linkMap.entrySet()) < System.out.println("Key : " + lhmap.getKey() + "\t\t" + "Value : " + lhmap.getValue()); >> >
Before Sorting by Values - as per insertion-order : Key : Google Value : Sundar Pichai Key : Facebook Value : Mark Zuckerberg Key : LinkedIn Value : Reid Hoffman Key : Apple Inc Value : Tim Cook Key : Microsoft Value : Bill Gates Key : Amazon Value : Jeff Bezos Key : Oracle Value : Larry Ellison Sorted LinkedHashMap by its Values in descending-order Key : Apple Inc Value : Tim Cook Key : Google Value : Sundar Pichai Key : LinkedIn Value : Reid Hoffman Key : Facebook Value : Mark Zuckerberg Key : Oracle Value : Larry Ellison Key : Amazon Value : Jeff Bezos Key : Microsoft Value : Bill Gates

Important points to remember about Map :

Happy Coding !!
Happy Learning !!

Источник

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