[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 382
  • Last Modified:

Sorting/printing a hasmap in a particular order

I am trying to sort the following data in my hash map from:
"JOHN", 26
"TERRY", 10
"ANDY", 5
"DAVID", 5
to:
"ANDY", 5
"DAVID", 5
"TERRY", 10
"JOHN", 26

Below is that code that has been used to make this work:

HashValueComparator comparator = new HashValueComparator(mymap);
TreeMap sortedMap = new TreeMap(comparator);
sortedMap.putAll(mymap);            
Object key = null;
for (Iterator i = sortedMap.keySet().iterator(); i.hasNext(); ) {
key = i.next();
System.out.println("Sorted: " + key + " => " + sortedMap.get(key));      
}

class HashValueComparator implements Comparator {
private Map map = null;
public HashValueComparator(Map map) {
setMap(map);
}
public void setMap(Map map) {
this.map = map;      
}
public int compare(Object o1, Object o2) {
Double DoubleA = (Double) map.get(o1);
Double DoubleB = (Double) map.get(o2);
int result = DoubleA.compareTo(DoubleB);
return result;
}
}

This works, however "DAVID", 5 overides "ANDY", 5, therefore I only get the 3 out 4 sorted elements.
Is there a way to correct this?
0
dr_alinaeem
Asked:
dr_alinaeem
  • 9
  • 4
  • 2
1 Solution
 
Mayank SAssociate Director - Product EngineeringCommented:
HashMaps are not sorted because they store data based on the hash-codes of the keys. If you want to use sorting, use a list (sorted using Collections.sort ()) or a TreeSet
0
 
Mayank SAssociate Director - Product EngineeringCommented:
Ah noticed you have a TreeMap. What is the key and what is the value? Are the strings used as keys or the integers?
0
 
Mayank SAssociate Director - Product EngineeringCommented:
Maybe try:

List sortedKeys = Collections.sort ( Arrays.asList ( myMap.keySet ().toArray () ) ) ;

for ( int i = 0, count = sortedKeys.size () ; i < count ; i ++ )
{
  Object key = sortedKeys.get ( i ) ;
  System.out.println ( "Key: " + key + ", value: " + myMap.get ( key ) ) ;

}
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
dr_alinaeemAuthor Commented:
i tried the way you told me and i get the following error:
cannot find symbol method sort

0
 
Mayank SAssociate Director - Product EngineeringCommented:
0
 
dr_alinaeemAuthor Commented:
I have read this before,  I am still getting the same error, does it work on your machine?
0
 
CEHJCommented:
private static void sortHash() {
      Map<String, Integer> map = new HashMap<String, Integer>();
      map.put("JOHN", 26);
      map.put("TERRY", 10);
      map.put("ANDY", 5);
      map.put("DAVID", 5);
      
      List<Map.Entry<String, Integer>> entries = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
      Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
            public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
                  int result = e1.getValue() - e2.getValue();
                  return (result == 0)? e1.getKey().compareTo(e2.getKey()) : result;
            }
      });
      System.out.println(entries);
}
0
 
Mayank SAssociate Director - Product EngineeringCommented:
What is the code you used?
0
 
Mayank SAssociate Director - Product EngineeringCommented:
You're not using it the right way is all that can be said without seeing your code.
0
 
dr_alinaeemAuthor Commented:
List sortedKeys = Collections.sort(Arrays.asList(Segment_Result.keySet().toArray()));

for ( int i = 0, count = sortedKeys.size () ; i < count ; i ++ )
{
  Object key = sortedKeys.get ( i ) ;
  System.out.println ( "Key: " + key + ", value: " + Segment_Result.get ( key ) ) ;

}      
0
 
Mayank SAssociate Director - Product EngineeringCommented:
Sorry, sort () does not return anything. It sorts the list passed to it.
0
 
Mayank SAssociate Director - Product EngineeringCommented:
List<String> sortedKeys = Arrays.asList ( ( String[] ) Segment_Result.keySet().toArray ( new String[0] ) ) ;
Collections.sort ( sortedKeys ) ;

// or Collections.sort ( sortedKeys, new HashValueComparator () ) ;
0
 
dr_alinaeemAuthor Commented:
this works, however i need the lowest entry at the top, e.g. lowest value first
0
 
Mayank SAssociate Director - Product EngineeringCommented:
Use the Comparator which CEHJ posted instead of yours.
0
 
CEHJCommented:
>>this works, however i need the lowest entry at the top, e.g. lowest value first

Isn't that a contradiction in terms?

0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 9
  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now