Переходные переходные ключи в карте - PullRequest
0 голосов
/ 17 января 2011

У меня есть Map<String, String>, который содержит такие элементы, как: {"a" = "b", "b" = "c", "c" = "d", "z" = "y",…}.

Мне нужен метод:

List<String> getTransitiveKeys(String startKey);// assuming the map is visible somehow as `map`

Когда вызывается getTransitiveKeys(“a”), он возвращает [«a», «b», «c»].Когда вызывается getTransitiveKeys (“z”), он возвращает [«z»].

Рекурсия, необходимая в методе?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 17 января 2011
List<String> getTransitiveKey(String key) {
   List<String> result = new LinkedList<String>();
   while(map.containsKey(key)) {
    // avoid endless loops
    if(result.contains(key)) {
      break;
    }

    result.add(key);  
    key = map.get(key)
  }
  return result;
}
0 голосов
/ 17 января 2011

почему рекурсия?всего одна петля

while(map.get(startKey) != null) {
    startKey =  map.get(startKey);
}
...