【问题标题】:Result of getValue in for-each loop for TreeMap<String, Set<String>>TreeMap<String, Set<String>> 的 for-each 循环中 getValue 的结果
【发布时间】:2018-01-31 04:40:52
【问题描述】:

(只是设置)。

TreeMap< String, Set< String>> map;

字符串是名称,集合是不同的时间戳,所以每个时间戳都可以有多个名称,如果都选择了相同的时间

...

(发起)

map = new TreeMap< String, Set< String>>;

...

for (Map.entry< String, Set< String>> mapEx : map.entrySet()){

map.getValue 会在这里产生什么结果? 像,下面的代码会导致我能够从地图中查看 Set 部分中的每个字符串并打印它们吗?

for(String stringEx : map.getValue()){

  System.Out.Println(stringEx);

}

【问题讨论】:

  • 不使用实际的迭代器,我想知道是否可以将其简化为 for-each 循环(对我来说它们更简单)
  • 最终目标是什么?
  • 我能够从地图中查看 Set 部分中的每个字符串并打印它们(理论上)
  • 好的,我有一个更完整的答案,方法更简单;)

标签: java foreach set treemap getvalue


【解决方案1】:

map.getValue 确实是Set&lt;String&gt;

如果你有这个循环

for(String stringEx : mapEx.getValue()){

  System.out.println(stringEx);

}

在这个循环中

     for (Map.entry< String, Set< String>> mapEx : map.entrySet()){ 
        // For each map entry value is set 
//of strings which can be printed by the loop shown before
     }

组合循环

for (Map.entry< String, Set< String>> mapEx : map.entrySet()){ 

       for(String stringEx : mapEx.getValue()){

      System.out.println(stringEx);

    }

         }

【讨论】:

  • 很好,正如我所愿。谢谢!
【解决方案2】:

我会提出 3 种不同的方法来实现这一目标:

使用 Java 8 Stream:遍历值,然后从每个 Set 遍历 String

map.values().stream().flatMap(Set::stream).forEach(System.out::println);
//  over Set        //over String from each Set       
// System.out::println === s -> System.out.println(s) and can be whatever you want   

每个人的经典不同之处Sets

for (Set<String> set : map.values()) {
    for (String stringEx : set) {
        System.out.println(stringEx);
    }
}

对于每个在不同的entries,然后取它们的值(Set&lt;String&gt;):

for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
    for (String val : entry.getValue()) {
        System.out.println(val);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多