当前位置: 首页 > 知识库问答 >
问题:

覆盖ArrayList中的HashMap值

林丁雷
2023-03-14

假设我有一个带有字符串键和整数值的HashMap:

map = {cat=1, kid=3, girl=3, adult=2, human=5, dog=2, boy=2}

我想通过将这些信息放入另一个HashMap中来切换键和值。我知道一个HashMap不能有重复的键,所以我尝试将信息放入一个HashMap中,其中包含映射到字符串ArrayList的键的整数,这样我就可以有一个整数映射到多个字符串:

swap = {1=[cat], 2=[adult, dog, boy], 3=[kid, girl], 5=[human]}
HashMap<Integer, ArrayList<String>> swap = new HashMap<Integer, ArrayList<String>>();

for (String x : map.keySet()) {
        for (int i = 0; i <= 5; i++) {
            ArrayList<String> list = new ArrayList<String>();
            if (i == map.get(x)) {
                list.add(x);
                swap.put(i, list);
            }
        }
    }

我在这里的目标是能够对任何一组数据进行“反转”,否则我只能硬编码值。我从上面的代码中得到的输出是:

swap = {1=[cat], 2=[boy], 3=[girl], 5=[human]}

正如您所看到的,我的问题是ArrayList值只保留了最后一个字符串,而不是收集所有字符串。如何使ArrayList存储每个字符串,而不仅仅是最后一个字符串?

共有1个答案

梁鸿风
2023-03-14

使用Java8,您可以执行以下操作:

Map<String, Integer> map = new HashMap<>();

map.put("cat", 1);
map.put("kid", 3);
map.put("girl", 3);
map.put("adult", 2);
map.put("human", 5);
map.put("dog", 2);
map.put("boy", 2);

Map<Integer, List<String>> newMap = map.keySet()
                                       .stream()
                                       .collect(Collectors.groupingBy(map::get));

System.out.println(newMap);

输出将是:

{1=[猫],2=[成人、狗、男孩],3=[小孩、女孩],5=[人]}

 类似资料:
  • 问题内容: 堆垛机。我一直在网站上搜索我的问题,但没有找到我想要的东西。我坚持下面的代码: 得到了一个不错的数组列表,但是如果我在ArrayList中添加更多“ newUsers”,它们似乎会相互覆盖。我不想创建一个newUser1,newUser2对象,因为稍后在我的程序中,我必须能够直接从该程序添加新用户。 如何实现呢? ValidateUser: } 问题答案: 如果我理解正确,那么您是以这

  • 问题内容: 我想为Java中的ArrayList拥有toString()方法的自己的实现。但是,即使我将这样的toString()添加到包含ArrayList的类中,我也无法正常工作。 当我这样调用ArrayList时,我仍然会获得默认表示形式。我想念什么吗? 问题答案: 你应该做类似的事情 并将列表作为参数传递给。您 可以从 技术上扩展(使用匿名类或具体类)并实现自己,但这在这里似乎是不必要的。

  • 这是我唯一的代码:

  • 我有一个hashmap,它包含一个arraylist作为值。我想检查其中一个ArrayList是否包含一个对象,然后从ArrayList中移除该对象。但是,怎么做? 我尝试过使用一些for循环,但是我得到了一个ConcurrentModificationException,并且我无法消除该异常。 我已经试过了:

  • 问题内容: 这个问题来自一个作业。我必须在创建循环链接列表的类中重写toString()方法,而实际上我的toString()方法效果很好,它通过了我所有的测试。因此,我的项目是自动分级的,显然它不是100%赞成我的方法。所以我的问题是:有没有更好的方法来编写此toString()方法,这样会更有效? 如果我需要详细说明类结构,以便更有意义,请告诉我。 问题答案: 使用StringBuilder。

  • 我正在尝试使用put方法将arraylist存储在hashmap中。我在下一步中清除了列表,以便在下一次迭代中添加下一组值。一旦清除列表,地图中的值也会被清除。虽然我在清理清单之前已经把清单放在地图上了。 sysout打印{key=[]} 有人请让我清楚如何坚持hashmaphash地图。