【问题标题】:How to convert Map<String, Set<String>> to Map<String, String[]> in Java如何在 Java 中将 Map<String, Set<String>> 转换为 Map<String, String[]>
【发布时间】:2015-11-17 15:27:49
【问题描述】:

我从一个方法中以Map&lt;String, Set&lt;String&gt;&gt; 的形式获取数据。但我希望它采用Map&lt;String, String[]&gt; 的形式。

即,我只想将特定键的映射值从 Set&lt;String&gt; 转换为 String[] 数组。

我尝试过这种方式,迭代加载的集合映射并为键正确获取 String[] 数组。

但我只是想知道,有没有比这更好的解决方案。

Map<String, Set<String>> testmap = new HashMap<String, Set<String>>();
        Map<String, String[]> testmapArray = new HashMap<String, String[]>();
        Set<String> testSet = new TreeSet<String>();
        testSet.add("1");
        testSet.add("2");
        testSet.add("3");

        testmap.put("A", testSet);
        testmapArray.put("A", testSet.toArray(new String[testSet.size()]));

        Set<String> testSet1 = new TreeSet<String>();
        testSet1.add("4");
        testSet1.add("5");
        testSet1.add("6");

        testmap.put("B", testSet1);
        testmapArray.put("A", testSet1.toArray(new String[testSet1.size()]));

        System.out.println(testmap);

        Iterator it = testmap.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            testmapArray.put(pair.getKey().toString(), testmap.get(pair.getKey()).toArray(new String[testmap.get(pair.getKey()).size()]));
        }
        System.out.println(testmapArray);

谁能帮帮我?

【问题讨论】:

  • 你所做的已经足够下降了。完蛋了。
  • 好吧,你还是应该避免使用原始类型 ;)。
  • @Tom 是的..这就是我发布这个的原因,我从这段代码中得到了一些警告..!!!
  • 所以?由于您已经知道泛型类型是什么(您已经在使用它们),您应该能够不使用原始的Iterator。所以添加泛型类型。你可以这样做:)。

标签: java arrays collections hashmap set


【解决方案1】:

您的解决方案即将生效,因此您应该考虑以下几点:

  1. Iterator 是泛型类型,所以你不应该做额外的转换
  2. 显式使用Iterator 没有意义:for 循环对每个IterableCollection -&gt; Set 是)隐式执行此操作
  3. 你在Map.Entry中只使用了key,但你也可以使用value,不需要再调用两次get

因此,转换将是:

for (Map.Entry<String, Set<String>> entry: testmap.entrySet()) {
    testmapArray.put(entry.getKey(),
            entry.getValue().toArray(new String[entry.getValue().size()]));
}

【讨论】:

    【解决方案2】:

    如果您使用的是 Java 8,那么您可以使用流来实现它:

    testmapArray = testmap.entrySet().stream().collect(Collectors.toMap(entry ->  entry.getKey(), entry-> setToArray(entry.getValue())));
    

    setToArray的方法是:

    private static String[] setToArray(Set<String> set) {
            return set.toArray(new String[set.size()]);
        }
    

    【讨论】:

      猜你喜欢
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多