【问题标题】:Need help mapping this data in Java需要帮助在 Java 中映射此数据
【发布时间】:2010-12-16 00:07:50
【问题描述】:

我在映射此数据时遇到问题

          1           35
          1           30
          1           20
          2           10
          3           40
          3           25
          3           15

我尝试使用 HashMap,但它只会映射到此数据的最后一次出现。

【问题讨论】:

    标签: java map


    【解决方案1】:

    正如其他评论者所指出的,您描述的 MapHashMap 的行为是预期的行为。你想要的是一个多图。您可以自己滚动(不要这样做--其他评论者建议将地图映射到列表,但这很快就会变得很麻烦。如果您真的想自己滚动,请使用列表/设置值滚动您自己的通用多图并隐藏复杂性。 ) 或使用Guavamultimap。示例:

    import com.google.common.collect.HashMultimap;
    import com.google.common.collect.SetMultimap;
    
      public static void main(String[] args) 
      {
        final SetMultimap<Integer, Integer> foo = HashMultimap.create();
        foo.put( 1,35);
        foo.put(   1,30);
        foo.put(  1,20);
        foo.put(  2,10);
        foo.put(  3,40);
        foo.put(  3,25);
        foo.put(  3,15);
        System.out.println(foo);
      }
    

    输出:

    {1=[35, 20, 30], 2=[10], 3=[25, 40, 15]}

    如果您想访问这些值,有几种方法,具体取决于您要执行的操作。只需调用get(Integer key) 将返回值的集合。

    另外,请查看this answer,它引用了番石榴中的许多相关优点。

    【讨论】:

      【解决方案2】:

      The documentation states:

      公共界面地图
      将键映射到值的对象。一个 map 不能包含重复的键; 每个键最多可以映射到一个值。

      相反,您可以将数字列表与每个键相关联。

      【讨论】:

        【解决方案3】:

        您可以使用Map&lt;Long, List&lt;Long&gt;&gt;(或您拥有的任何类型)来解决此问题。

        【讨论】:

          【解决方案4】:

          Map 只有一个键值。您可以使用Guava / Google Collections 中的Multimap 接口为一个键存储多个值。

          【讨论】:

            【解决方案5】:

            或者创建一个 Pair 类并将它们放在一个列表中

            列表 >

            【讨论】:

              猜你喜欢
              • 2010-11-18
              • 1970-01-01
              • 2021-11-28
              • 1970-01-01
              • 1970-01-01
              • 2011-01-06
              • 1970-01-01
              • 1970-01-01
              • 2019-02-12
              相关资源
              最近更新 更多