Como trocar valores e chaves de arrayMap em Java

Estou tendo um pouco de dificuldade para reverter um determinado mapa e armazenar suas chaves e valores invertidos em outro mapa. Eu tenho um protótipo de método da seguinte forma:

public static Map<String, Set<String>> reverse (Map <String, Set<String>> graph);

Então, se eu tiver chaves de amostra para o gráfico direcionado, tais que:

{c -> arraySet{f, e}}
{b -> d}
{a -> arraySet{c, b}} 
{d -> g}
{e -> d}
{f -> arraySet{g, d}}

Eu preciso efetivamente inverter este gráfico para que em vez de b -> d eu tenha d -> b.

Eu acho que tudo isso requer é para mim é trocar os valores e chaves no gráfico original e adicioná-los ao reverseMap. Suponho que eu poderia percorrer cada conjunto de valores para uma determinada chave no gráfico e, em seguida, armazená-los em uma lista.

Infelizmente, estou tendo problemas para implementar isso e pensar nisso. Eu realmente aprecio um empurrão na direção certa.

questionAnswers(4)

yourAnswerToTheQuestion