有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

循环Java嵌套映射字符串数组循环可选<map<String,map<String,String[]>>

我有一个对象Optional<Map<String,Map<String,String[]>>>如何循环数组中的每个字符串

下面的代码我希望“application”是“String”,但它给了我“String[]”

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());
        }

共 (2) 个答案

  1. # 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. # 2 楼答案

    它是一个字符串数组,因为v.values()是集合<;字符串[]>;,不仅仅是绳子。如果只想打印字符串,则需要将其展平

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

    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());
    }