- Java – How to sort LinkedHashMap by its Keys ?
- 1. Sorting LinkedHashMap in ascending order of Keys :
- SortingLinkedHashMapInAscOrder.java
- 2. Sorting LinkedHashMap in descending order of keys :
- SortingLinkedHashMapInDesOrder.java
- Important points to remember about Map :
- Сортировка карты по значениям в Java
- 1. Использование TreeMap
- 2. Использование LinkedHashMap
- 3. Использование Java 8
- Java – How to sort LinkedHashMap by its Values ?
- 1. Sorting LinkedHashMap in ascending order of values :
- 1.1 Ascending-order sorting steps :-
- 1.2 Sorting LinkedHashMap by its values in ascending-order :
- SortingLinkedHashMapInAscOrderByValues.java
- 2. Sorting LinkedHashMap in descending order of Values :
- 2.1 Descending-order sorting steps :-
- 2.2 Sorting LinkedHashMap by its values in descending-order :
- SortingLinkedHashMapInDesOrderByValues.java
- Important points to remember about Map :
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
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 интерфейс с предсказуемым порядком итерации, то есть порядком, в котором значения были вставлены в карту. Мы можем использовать это свойство для создания копии карты, отсортированной в соответствии с естественным порядком ее значений.
- Создайте список записей карты и отсортируйте их на основе их значений.
- Создать пустой LinkedHashMap и для каждой записи карты в отсортированном списке вставьте в него пару ключ-значение.
Результирующий LinkedHashMap будут отсортированы по значениям.
результат:
Sorted map by values :
3. Использование Java 8
Мы также можем использовать Java 8 Stream для сортировки карты по значениям. Ниже приведены шаги:
- Получите поток из заданного представления сопоставлений, содержащихся в карте.
- Отсортируйте поток в естественном порядке значений, используя Stream.sorted() метод путем передачи компаратора, возвращаемого Map.Entry.comparingByValue() .
- Соберите все отсортированные элементы в 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 :-
- get entrySet() from Map
- create/convert entry set into List of entries
- sort converted List using Collections class’ sort(); method by implementing Comparator for natural-ordering by its Values
- clear original LinkedHashMap using clear(); method
- Iterate List and add entries to original LinkedHashMap, after clearing
- 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 SetcompanyFounderSet = 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 :-
- get entrySet() from Map
- create/convert entry set into List of entries
- sort converted List using Collections class’ sort(); method by implementing Comparator for reverse sorting logic by its Values
- clear original LinkedHashMap using clear(); method
- Iterate List and add entries to original LinkedHashMap, after clearing
- 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 SetcompanyFounderSet = 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 !!