Arav
Arav

Reputation: 5247

Iterate Hash Map

I have an hashmap declared as private HashMap testMessages = null;

I will be storing string values in both key and value part of the hashmap retrieved from oracle table.

I am not concerned about the hashmap keys. I want to retrieve the hashmap values alone and check whether string variable filename is prefixed with one of the hash map value and return true if it's same. I want to ensure that hash map values are not null and empty.

function (string filename) {..

loop thru hashmap values

check whether the variable file name is prefixed with one of the hashmap values if so return true otherwise return false }

hashmap example: key1,prod key2,test key3,dummy
filename example: test123_20012010.csv

should return true since the file name is prefixed with one of the hashmap values

How can i do it?

Upvotes: 0

Views: 1761

Answers (4)

marklai
marklai

Reputation: 2040

Here's a brute force approach to iterate over the hash map values and check whether filename begins with the value.

// generics version
private HashMap<String, String> testMessages = buildMap();

for (String v : testMessages.values()) {
  if (filename.startsWith(v) {
    // found a map value that starts the file name
  }
}

// alternative non-generics version
private HashMap testMessages; // assigned somewhere

for (Object v : testMessages.values()) {
  if (filename.startsWith((String) v) {
    // found a map value that starts the file name
  }
}

Upvotes: 2

polygenelubricants
polygenelubricants

Reputation: 383866

for (String prefix : map.values()) {
   if (filename.startsWith(prefix)) {
      return true;
   }
}
return false;

It should be noted that this is linear time in the number of entries in the map in the worst case. If you have multiple filename that you want to do the check for, it's much better to preprocess the prefixes and build something like a patricia trie and other fast dictionary-like data structures.

Upvotes: 5

Anantha Kumaran
Anantha Kumaran

Reputation: 10389

function(String fileName)
{
     for(String value : hashMap.values())
     {
      if(fileName.startsWith(value))
           return true;
     }
  return false;
}

Upvotes: 0

Eric
Eric

Reputation: 19873

leeched from leepoint.net

public static void iterate_over_hashmap(Map mp) {
    Iterator it = mp.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry)it.next();
        System.out.println(pairs.getKey() + " = " + pairs.getValue());
    }
}

You have to treat each entry as a key/value pair and iterate over those as a single entity. Then you cast it into Map.Entry and then you can read both separately

Upvotes: 0

Related Questions