2016-09-26 1 views
-1

Je souhaite obtenir un LinkedHashMapclé basé sur l'index. J'ai essayé this et utilisé une implémentation LinkedHashMap au lieu de l'implémentation HashMap pour préserver l'ordre d'insertion.Obtenir la clé de carte basée sur l'index

J'ai utilisé ci-dessous le code (de certains semblent poster je ne peux pas trouver) pour obtenir la clé par valeur:

private Long getKeyByValue(Map<Long, String> map, String value) { 

    for (Map.Entry<Long, String> entry : map.entrySet()) { 
     if (entry.getValue().equalsIgnoreCase(value)) { 
      return entry.getKey(); 
     } 
    } 

    // -1 if key not found 
    return (long) -1; 
} 

Le problème est, au-dessus méthode est utile que lorsque la valeur carte n'est pas coutume ou pas une collection. Dans mon cas, j'ai un Map<String, List<Issues>>Issues est ma propre classe définie et je veux obtenir, disons, 2ème clé qui est String basé sur l'index qui est de 2, dans ce cas. Suggestions?

+1

Vous devez mettre en œuvre un intérieur pour la boucle et itérer sur la collection 'issues' si trouvé la clé hashmap peut être retourné –

Répondre

2

que diriez-vous:

static <K> K getKeyByIndex(Map<K,?> sortedMap, int index) 
{ 
    assert index >= 0; 
    assert index < sortedMap.size(); 
    for(K key : sortedMap.keySet()) 
    { 
     if(index == 0) 
      return key; 
     index--; 
    } 
    assert false; //should never happen. 
}