2009-11-19 4 views
-1
public interface InnerMap<V> extends Map<String, V> { 
    Map<String, V> getInnerMap(String prefix); 
} 

Par exemple:Je veux créer un hashmap à partir d'un hashmap avec une relation innermap et outermap?

baseMap.put("aabb", "one"); 
baseMap.put("aabbddd", "two"); 
InnerMap map1 = baseMap.getInnerMap("aa"); 
map1.get("bb") => "one" 
map1.get("bbdd") => "two" 
map1.get("aa") => null 
map2 = map1.getInnerMap("bb"); 
map2.get("dd") => "two" 

et veulent aussi passer outre mettre et obtenir la méthode

+0

Quelle est votre question? –

+0

Quelle est la question? Vous avez déclaré ce que vous voulez, maintenant que demandez-vous? –

+0

Y a-t-il une raison pour laquelle vous n'utilisez pas une carte >? –

Répondre

2

Il serait difficile de garder une trace de toutes les cartes intérieures possibles. Il n'y a aucun doute une solution beaucoup plus efficace que le mien si vous indexé les clés et autres. Cependant, si rapide et sale travaille pour vous, essayez ceci. Vous n'avez pas mentionné une langue donc vous obtenez Java - j'espère que j'ai deviné juste!

import java.util.HashMap; 
import java.util.Map.Entry; 

public class InnerMap extends HashMap<String, String> { 

    public InnerMap getInnerMap(String key) { 
     InnerMap innerMap = new InnerMap(); 
     for (Entry<String, String> entry : entrySet()) { 
      String existingKey = entry.getKey(); 
      String value = entry.getValue(); 
      if (existingKey.startsWith(key)) { 
       String newKey = existingKey.substring(key.length()); 
       innerMap.put(newKey, value); 
      } 
     } 
     return innerMap; 
    } 

} 

public class Test { 
    public static void main(String[] args) { 
     InnerMap baseMap = new InnerMap(); 
     baseMap.put("aabb", "one"); 
     baseMap.put("aabbdd", "two"); 
     InnerMap map1 = baseMap.getInnerMap("aa"); 
     System.out.println(map1.get("bb"));// => "one" 
     System.out.println(map1.get("bbdd"));// => "two" 
     System.out.println(map1.get("aa"));// => null 
     InnerMap map2 = map1.getInnerMap("bb"); 
     System.out.println(map2.get("dd"));// => "two" 
    } 
} 
+1

Vous devez être un visionnaire pour répondre à cette question. – guerda

+0

"doit être un visionnaire ..." J'ai vu les plus mauvaises exigences des clients! Mais en regardant le titre et le comportement de l'exemple, cela ressemble certainement à ce qu'ils étaient après. – vickirk

+0

Peut-être pouvez-vous utiliser mon code comme exemple pour vous aider à démarrer? – monorailkitty