如何遍历Optional<Map<String,Map<String,String[]>>>中数组的每个String元素
问题原因
你当前定义的第二层循环遍历对象是Map<String, String[]>的values()集合,该集合存储的元素本身就是String[]字符串数组类型,因此自然无法直接得到单个String类型的application变量,需要额外增加一层循环遍历数组内的单个元素。
修正后代码
Optional<Map<String,Map<String,String[]>>> myObject = Optional.of(yamlReader.read(name, HashMap.class)); // 先判断Optional非空再操作,避免直接get()抛出异常 if (myObject.isPresent()) { 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(); // 第一层遍历拿到String数组 for (String[] appArray : v.values()) { // 新增第二层遍历,拿到数组内单个String元素 for (String application : appArray) { System.out.println(application + " " + x.getKey()); } } } }
补充说明
- 不要直接调用
Optional.get(),如果Optional为空会抛出NoSuchElementException,优先使用ifPresent、orElse等方法处理空场景 - 如果还需要获取第二层Map的key(也就是内层Map的String类型键),可以调整遍历逻辑遍历内层Map的
entrySet()而非values()
内容的提问来源于stack exchange,提问作者RocksAB
相关产品推荐
相关产品推荐

