当前位置: 首页 > 面试题库 >

如何在Java中交换arrayMap的值和键

潘琨
2023-03-14
问题内容

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

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;
}


 类似资料:
  • 问题内容: 我已经知道如何用辛苦的方式做到这一点,并使它起作用-遍历条目并“手动”交换。但是我想知道是否可以像许多任务一样以一种更优雅的方式解决这一问题。 我可以假设我的地图是双射的,顺便说一句:) 问题答案: 标准的API / Java运行时不提供双向映射,因此唯一的解决方案是遍历所有条目并手动交换它们。 您可以做的是创建一个包装器类,该包装器类包含两个映射,并且在内部进行双重处理,因此您可以快

  • 整个夏天我都在尝试练习java,但我被这个问题困住了。我需要在Java中交换整数中的2个字母。例如,在main方法中,我创建了一个名为swapdigits的方法,参数为1432。程序应该交换4和1以及3和2。输出应该是4123,因为它按顺序交换了这两个字母。假设我做swapdigits(1341234),输出应该是3114324。我知道我必须使用while循环,但我在交换上卡住了。 这是我目前所掌

  • 问题内容: 我收到一个字典作为输入,并想返回一个字典,其键将是输入的值,而其值将是对应的输入键。价值观是独一无二的。 例如,说我的输入是: 我希望我的输出是: 为了澄清,我希望我的结果等于以下内容: 有什么精巧的Pythonic方式可以做到这一点? 问题答案: Python 2: Python 3(感谢@erik):

  • 我正在制作一个minecraft插件,当服务器启动时,只要字符串能力等于“是”,它每5秒做一个动作,当你键入 /nameme-enable时,它将其设置为是, /nameme-disable将其设置为否。然而,我似乎无法更改字符串值,我看到另一个人7年前问了另一个问题,但它返回为他的,字符串并添加另一个值,而他的是在一个方法中,这是命令的代码...

  • 问题内容: 我有一个带有坐标的MySQL表,列名称为X和Y。现在我想交换此表中的列值,以使X成为Y,Y成为X。最明显的解决方案是重命名列,但是我不想进行结构更改,因为我不一定有这样做的权限。 这可能以某种方式与 UPDATE 有关吗? UPDATE表SET X = Y,Y = X 显然不会满足我的要求。 编辑:请注意,我上面提到的权限限制有效地阻止了ALTER TABLE或其他更改表/数据库结构的

  • 我知道已经提出了许多关于同样的问题,但没有一个对我的案件有所帮助。 在这里,我试图在Split的第一次迭代中将一些值设置到Header中,然后在拆分的第二次迭代中,我需要旧的交换值将其附加到当前值。 代码:SomeDummyClass2.java 骆驼路线: 我已经通过了其他一些问题,他们要求使用CamelSplitIndex或AggregationStrategy,但我是新手,有人能帮帮我吗?