import
java.util.Collections;
import
java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import
java.util.LinkedHashMap;
import
java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.ArrayList;
/**
* Sorting HashMap by key or value
* 1. Create data for HashMap<Employee,
Employee>
* 2. Get the EntrySet and create an object of
ArrayList
* 3. Pass this list into Collections.sort and
pass a
* Comparator<Entry<Employee,Employee>>
of entry set as shown below
* 4. After sorting, iterate sorted list and
put key values in new LinkedHashMap
* 5. Iterate LinkedHashMap which you get in
step 4. Sorted values will be printed.
*/
import classes.Employee;
public class SortHashMap {
public static void main(String[] args)
{
sortByKey();
sortByValue();
}
private static void
printUsingIterator(HashMap<Employee,Employee> sortedMap){
Set<Entry<Employee,Employee>>
entrySet = sortedMap.entrySet();
Iterator<Entry<Employee,Employee>>
itr = entrySet.iterator();
while (itr.hasNext()){
Entry<Employee,Employee> entry = itr.next();
System.out.println("Key of Map ::
"+entry.getKey().getEmpName()+" Value of Map :: "+entry.getKey().getEmpName());
}
}
private static void sortByKey(){
HashMap<Employee,Employee>
empMap=prepareData();
List<Entry<Employee,Employee>>
listEntrySet = new ArrayList<Entry<Employee,
Employee>>(empMap.entrySet());
Collections.sort(listEntrySet,new
Comparator<Entry<Employee,Employee>>(){
@Override
public int
compare(Entry<Employee, Employee> o1,
Entry<Employee,
Employee> o2) {
return
o1.getKey().getEmpName().compareTo(o2.getKey().getEmpName());
}
});
HashMap<Employee,Employee>
map = new
LinkedHashMap<Employee,Employee>();
for (Entry<Employee,Employee>
e: listEntrySet){
map.put((Employee)e.getKey(),
(Employee)e.getValue());
}
printUsingIterator(map);
}
private static void sortByValue(){
HashMap<Employee,Employee>
empMap=prepareData();
List<Entry<Employee,Employee>>
listEntrySet = new LinkedList<Entry<Employee,
Employee>>(empMap.entrySet());
Collections.sort(listEntrySet,new
Comparator<Entry<Employee,Employee>>(){
@Override
public int
compare(Entry<Employee, Employee> o1,
Entry<Employee,
Employee> o2) {
return
o1.getValue().getEmpName().compareTo(o2.getValue().getEmpName());
}
});
HashMap<Employee,Employee>
map = new
LinkedHashMap<Employee,Employee>();
for
(Entry<Employee,Employee> e: listEntrySet){
map.put((Employee)e.getKey(),
(Employee)e.getValue());
}
printUsingIterator(map);
}
private static
HashMap<Employee,Employee> prepareData(){
HashMap<Employee,Employee>
mapA = new
HashMap<Employee,Employee>();
mapA.put(new Employee(new Long(6),"Six"),new Employee(new Long(6),"Six"));
mapA.put(new Employee(new Long(7),"Seven"),new Employee(new Long(7),"Seven"));
mapA.put(new Employee(new Long(8),"Eight"),new Employee(new Long(8),"Eight"));
mapA.put(new Employee(new Long(3),"Third"),new Employee(new Long(3),"Third"));
mapA.put(new Employee(new Long(4),"Forth"),new Employee(new Long(4),"Forth"));
mapA.put(new Employee(new Long(5),"Fift"),new Employee(new Long(5),"Fift"));
return mapA;
}
}