-1

我有一个对象,Optional<Map<String,Map<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());
        }
4

2 回答 2

0

它是一个 String 数组,因为v.values()它是 Collection<String[]>,它不仅仅是 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());
}
于 2021-09-24T04:19:05.807 回答
0

您需要遍历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);

     });
}
于 2021-09-24T04:14:35.697 回答