我在反转给定的映射并将其反转的键和值存储到另一个映射时遇到了一些麻烦。我有一个方法原型如下:

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


因此,如果我有向图的样例键如下:

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


我需要有效地反转该图,以便使d-> b代替b-> d。

我认为这对我来说就是要交换原始图中的值和键,并将它们添加到reverseMap中。我想我可以遍历图中给定键的每组值,然后将它们存储在列表中。

不幸的是,我在实施和思考时遇到了麻烦。我真的很感激朝着正确方向前进。

最佳答案

您将需要遍历映射中的条目,然后,由于值存储在集合中,因此将需要遍历该集合。您将需要检查每个键的结果图,并在键不存在时创建一个新的键集。

public static Map<String, Set<String>> reverse (Map <String, Set<String>> graph) {
    Map<String, Set<String>> result = new HashMap<String, Set<String>>();
    for (Map.Entry<String, Set<String>> graphEntry: graph.entrySet()) {
        for (String graphValue: graphEntry.getValue()) {
            Set<String> set = result.get(graphValue);
            if (set == null) {
                set = new HashSet<String>();
                result.put(graphValue, set);
            }
            set.add(graphEntry.getKey());
        }
    }
    return result;
}

关于java - 如何在Java中交换arrayMap的值和键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12736887/

10-11 18:19