【问题标题】:java multi mapping arraylistjava多映射arraylist
【发布时间】:2012-01-27 16:44:21
【问题描述】:

是否可以将键映射到多维数组列表。类似下面的例子..

Map<K,V>

其中 K 是字母列表的键,V 是存储单词列表的多维数组列表或普通数组列表。诸如读取字典文件的应用程序之类的东西。我想看一个例子。示例可以是与 Map 和多维数组列表相关的任何内容。 或者有没有其他有效的方法来实现收集?我从来没有使用过这样的实现,所以如果已经有一个与我的 QA 相关的线程,请发布链接。

【问题讨论】:

    标签: java collections map arraylist


    【解决方案1】:

    你总是可以Map&lt;String, &lt;List&lt;String&gt;&gt;。例如

    Map<String, List<String>> multimap = new HashMap<String, List<String>>();
    String key = "asdf";
    List<String> values = Arrays.asList("foo", "bar");
    multimap.put(key, values);
    

    您还可以使用Google Guava 中的Multimap&lt;String, String&gt; 接口 - 可能更适合您的需求。它在一定程度上简化了编码 -

    Multimap<String, String> multimap = new ArrayListMultimap<String, String>();
    String key = "asdf";
    multimap.put(key, "foo");
    multimap.put(key, "bar");
    

    【讨论】:

      【解决方案2】:

      如果您想将多个值与单个键相关联,您可以使用Guava's Multimap's。您需要 ArrayListMultimap 来处理您的具体情况。

      例子

      ListMultimap<String, String> dict= new ArrayListMultimap<String, String>();
      dict.put("key 1", "value 1");
      dict.put("key 1", "value 2");
      dict.put("key 2", "value 1");
      

      【讨论】:

      • 'ArrayListMultimap()' has private access in 'com.google.common.collect.ArrayListMultimap'我做错了什么?
      • 不应该是Multimap&lt;String, String&gt; multimap = ArrayListMultimap.create();吗?
      • Guava 21 以上new ArrayListMultimap&lt;String, String&gt;();ArrayListMultimap.create(); 都已弃用。新风格是:ListMultimap&lt;String, Integer&gt; result = MultimapBuilder.hashKeys().arrayListValues().build()享受:)
      • 确切地说 ArrayListMultimap.create(); 有效,但在文档中它被标记为“即将被弃用”。
      【解决方案3】:

      以下代码没有 Google 的 Guava 库。它用于双值作为键和排序顺序

      Map<Double,List<Object>> multiMap = new TreeMap<Double,List<Object>>();
      
      for( int i= 0;i<15;i++)
      {
          List<Object> myClassList = multiMap.get((double)i);
          if(myClassList == null)
          {
              myClassList = new ArrayList<Object>();
              multiMap.put((double) i,myClassList);
          }
          myClassList.add("Value "+ i);
      }
      
      List<Object> myClassList = multiMap.get((double)0);
      if(myClassList == null)
      {
          myClassList = new ArrayList<Object>();
          multiMap.put( (double) 0,myClassList);
      }
      myClassList.add("Value Duplicate");
      for (Map.Entry entry : multiMap.entrySet()) 
      {
        System.out.println("Key = " + entry.getKey() + ", Value = " +entry.getValue());
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-18
        • 2011-03-11
        • 1970-01-01
        • 2014-10-29
        • 1970-01-01
        • 1970-01-01
        • 2016-07-02
        • 2013-03-15
        相关资源
        最近更新 更多