【问题标题】:Java Nested map String array Looping Optional<Map<String,Map<String,String[]>>>Java嵌套映射字符串数组循环可选<Map<String,Map<String,String[]>>>
【发布时间】:2021-11-17 09:24:48
【问题描述】:

我有一个Optional&lt;Map&lt;String,Map&lt;String,String[]&gt;&gt;&gt; 的对象,如何循环遍历数组中的每个字符串?

下面的代码我期望“应用程序”是“字符串”,但它给了我“字符串 []”

Optional<Map<String,Map<String,String[]>>> myObject =  Optional.of(yamlReader.read(name, HashMap.class));

Set<Map.Entry<String, Map<String, String[]>>> abc = myObject.get().entrySet();
for ( Map.Entry<String, Map<String, String[]>> x:abc) {
        Map<String, String[]> v = x.getValue();
       

 //I am expecting "application" to be String here but it is an array of Strings for some reason
        for (String[] application: v.values()) { 
          System.out.println(application + " " + x.getKey());
        }

【问题讨论】:

  • 当地图声明为Map&lt;String, String[]&gt;&gt; 时,为什么您希望地图值的类型为String
  • 闻起来应该有一个类型化的数据结构。

标签: java loops java-8 hashmap nested-map


【解决方案1】:

您需要遍历 String[] 以获取各个值。

您可能需要使用您现在使用的结构来验证给定的要求。

for (Map.Entry<String, Map<String, String[]>> x : abc) {
     Map<String, String[]> v = x.getValue();
     v.values().forEach(value -> {
        System.out.println("value:" + " " + value);

     });
}

【讨论】:

    【解决方案2】:

    它是一个String数组,因为v.values()是Collection,它不仅仅是String。如果你只想打印字符串,你需要把它弄平。

    因此,如果您的最终目标是打印集合中所有可用的字符串,则可以使用以下代码。

    myObject.ifPresent(map -> map.values().stream().map(Map::values).flatMap(Collection::stream).flatMap(Arrays::stream).forEach(System.out::println));
    

    或者如果您想调整您的代码,请执行以下操作来替换您的 for last 循环

    v.values().stream().flatMap(Arrays::stream).forEach(application -> System.out.println(application + " " + x.getKey()));
    

    for (String[] application: v.values()) {
       System.out.println(Arrays.asList(application) + " " + x.getKey());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 2014-06-25
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多