【问题标题】:How to insert duplicate values in map如何在地图中插入重复值
【发布时间】:2022-01-03 07:16:19
【问题描述】:

我有以下包含值的列表

List<Customer> list = new ArrayList<>();

list.add( new Customer("ram","Mumbai",1234));

list add(new Customer ("veer","Mumbai",8467));

list.add(new Customer ("jai","Delhi",5242))

我必须迭代这个列表并以这样的方式插入地图,地址是关键,客户对象应该作为地图的值,但问题是,对于同一个关键,如果我们插入重复值,它会覆盖现有值,如何插入对象而不是替换,

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

正在寻找输入,在此先感谢。

【问题讨论】:

  • 简短回答你不能。存档的唯一方法是使用 List&lt;Customer&gt; 作为值
  • Map> map = new HashMap();
  • 如果您使用上述数据调用yourMap.get("Mumbai");,您需要考虑您想要的结果。一旦你决定了,你就可以进行相应的编码了。

标签: java collections


【解决方案1】:

地图中不能有重复的键。您可以创建一个Map&lt;Key, List&lt;Value&gt;&gt;,或者如果可以,使用 Guava 的 Multimap。然后你就可以得到java了。实用程序。

Map<String, List<String>> map = new HashMap<>();map.computeIfAbsent("key1", k -> new ArrayList<>()).add("value1");map.computeIfAbsent("key1", k -> new ArrayList<>()).add("value2"); assertThat(map.get("key1").get(0)).isEqualTo("value1");assertThat(map.get("key1").get(1)).isEqualTo("value2");

【讨论】:

    【解决方案2】:

    您不能在 map 中插入重复的键,但可以插入键不同的重复值。

    【讨论】:

      【解决方案3】:

      首先将地图从 Map&lt;String, Customer&gt; map = new HashMap&lt;&gt;(); 更改为 Map&lt;String, List&lt;Customer&gt;&gt; map = new HashMap&lt;&gt;();

      迭代这个列表并插入到地图中,地址是关键,客户对象应该作为地图的值

      是的,你的方法很好。

      for (Customer customer : list) {
          if (map.containsKey(customer.getCity())) { // check if the key exists
              map.get(customer.getCity()).add(customer); // add the customer in the existing value list
          } else {
              List<Customer> customers = new ArrayList<>(); // new list
              customers.add(customer);
              map.put(customer.getCity(), customers); // insert current <key,<value>> as the key doesn't exists.
          }
      }
      

      【讨论】:

        【解决方案4】:

        生成的映射应该有List&lt;Customer&gt;作为值类型,并且可以使用Stream API中最简单的Collectors::groupingBy收集器创建这样的映射:

        Map<String, List<Customer>> customersByCity = list.stream()
            .collect(Collectors.groupingBy(Customer::getCity));
        
        System.out.println(customersByCity);
        // -> {Mumbai=[{name=ram, city=Mumbai, num=1234}, {name=veer, city=Mumbai, num=8467}], Delhi=[{name=jai, city=Delhi, num=5242}]}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-11
          • 2019-04-07
          • 1970-01-01
          • 2019-06-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多