2016-10-20 17 views
0

マネージャと従業員の間のレベル数を計算します。Javaで報告する階層の数を確認してください

つまり、empidを指定すると、階層に何人のマネージャーがいるか知りたいと思います。 Hereは、直接レポートの件数を確認できるサンプルです

しかし、私はemp-mgr階層レベルを探したいと思います。

例えば、 EMPは、MGR Cは、Aの管理者である。この例では

{ "A", "C" }, 
{ "B", "C" }, 
{ "C", "D" }, 
{ "D", "E" }, 
{ "E", "F" }, 
{ "F", "F" } 

、 Cはまた、Bの管理者であり、Fは、マネージャ Cの等です。

F -> A = 3(mgrs between) 

私は限り、あなたは1つの明確に質問に答えるを超えて何の努力を示さなかったとして、あなたにこれを与えるべきではない、この使用してJava

+2

印刷し

Map<String, String> management = new HashMap<>(); management.put("A", "C"); management.put("B", "C"); management.put("C", "D"); management.put("D", "E"); management.put("E", "F"); management.put("F", "F"); System.out.println(treeHeight(management) - 1); 

:間で管理職の数だけを取得するには1を引きます。何か試しましたか? X = A - > XのマネージャーをX = Fまで取得します。前のステップの番号を取得します。 –

+0

私はあなたの例を理解していません、助けてください。それはA→C→D→E→Fですか? –

+0

マネージャFと従業員Aと言う場合、レベルはF else 3を含む4レベルですか? –

答えて

0

を解決するために私を助けてくださいすることができます。私の考えは、すべてのマネージャー(C、D、E、F)から始め、そこから管理ツリーをどれくらい上っていくことができるかを数えます。

public static <T> int treeHeight(Map<T, T> management) { 
    // find first level managers 
    Collection<T> managers = management.entrySet() 
      .stream() 
      .filter(entry -> ! entry.getKey().equals(entry.getValue())) 
      .map(Map.Entry::getValue) 
      .collect(Collectors.toCollection(HashSet::new)); 
    int level = 0; 
    while (! managers.isEmpty()) { 
     level++; 
     // find next level managers 
     managers = managers.stream() 
       .filter(emp -> ! emp.equals(management.get(emp))) 
       .map(emp -> management.get(emp)) 
       .collect(Collectors.toCollection(HashSet::new)); 
    } 
    return level; 
} 

この方法は、空のマップまたはマップの(実施例では、すなわち、自己管理マネージャ(ルート)に最も低い従業員(管理ツリーの葉)から歩数を見つける4自己管理マネージャーのみから構成され、0を返します)。これは簡単な作業のように思える3.

+0

Jee、これは役に立ちましたか?あなたが他の回答が来るのを待っていない限り、あなたが思ったら、受け入れられたものとしてマークする(答えの左に目盛りを押してください)。 –

+0

返信ありがとうございました。これは私に多くの選択肢を見せるのに役立った。 前のコメントで述べたようにマネージャに従業員の報告が多い場合は、さらにレベルを確認する必要があります。 – Jee

関連する問題