2016-07-27 42 views
0

我想通過一個HashMap循環,這樣它應該選擇任何隨機的鍵,如果找到該鍵,它應該跳出循環並選擇與該KEY對應的值。選擇一個RANDOM鍵,然後突破在HashMap中的迭代器/循環

但不知何故此代碼不起作用,它只是選擇一個特定的值。請注意,它具有我編寫了下面IF語句的所有值和鍵。

下面是我的代碼

Iterator<Entry<String, Set<String>>> it = arg0.getSubstylearea().entrySet().iterator(); 

    A: while (it.hasNext()) { 
     Map.Entry<String, Set<String>> entry = (Map.Entry<String, Set<String>>) it.next(); 
     String key = entry.getKey(); 
     Set<String> temp = arg0.getSubstylearea().get(key); 

     if (key.equals("Eyes")) { 
      flatont.setStylearea1(key); 
      System.out.println("This Doesnt Print"); 
      for (String s : temp) { 

       flatont.setStylesubarea1(s); 

      } 
      break A; 
     } else if (key.equals("Face")) { 

      flatont.setStylearea1(key); 

      for (String s : temp) { 

       flatont.setStylesubarea1(s); 
      } 
      break A; 
     } else if (key.equals("Lips")) { 

      flatont.setStylearea1(key); 

      for (String s : temp) { 

       flatont.setStylesubarea1(s); 
      } 
      break A; 
     } 
} 

請幫我如何實現這一目標

+0

如果你刪除'break'陳述會發生什麼?或者使用'continue'來代替? –

+0

如果我使用continue,如下面的答案中所建議的那樣,它仍然會通過循環來通過,我可能會得到不需要的值。 –

回答

0

我不完全明白你以後在做什麼,但試試這個:

Map<String, Set<String>> map = arg0.getSubstylearea() 
    int index = new Random().nextInt(map.size()); 
    int i = 0; 
    for (Map.Entry<String, Set<String>> entry : map.entrySet()) { 
     if (i++ < index) { 
      continue; 
     } 
     String key = entry.getKey(); 
     Set<String> temp = arg0.getSubstylearea().get(key); 

     if (key.equals("Eyes")) { 
      flatont.setStylearea1(key); 
      System.out.println("This Doesnt Print"); 
      for (String s : temp) { 

       flatont.setStylesubarea1(s); 

      } 
     } else if (key.equals("Face")) { 

      flatont.setStylearea1(key); 

      for (String s : temp) { 

       flatont.setStylesubarea1(s); 
      } 
     } else if (key.equals("Lips")) { 

      flatont.setStylearea1(key); 

      for (String s : temp) { 

       flatont.setStylesubarea1(s); 
      } 
     } else { 
      // Do something else 
     } 
     break; 
    } 
+0

嗨,謝謝你的回覆,你有什麼想法,即時通訊試圖實現,即選擇一個隨機密鑰,然後根據該密鑰選擇其相應的值。當映射爲空時,我該怎麼做,因爲它的異常java.lang.IllegalArgumentException:n必須是正數 –

+0

如果映射爲空(或空值),則應該完全跳過該代碼。剛回來;該方法或將所有內容都包含在if塊中 – erikh

0

什麼簡單的continue

while (it.hasNext()) { 
    Map.Entry<String, Set<String>> entry = (Map.Entry<String, Set<String>>) it.next(); 
    String key = entry.getKey(); 
    Set<String> temp = arg0.getSubstylearea().get(key); 

    if (key.equals("Eyes")) { 
     flatont.setStylearea1(key); 
     System.out.println("This Doesnt Print"); 
     for (String s : temp) { 

      flatont.setStylesubarea1(s); 

     } 
     continue; 
    } else if (key.equals("Face")) { 

     flatont.setStylearea1(key); 

     for (String s : temp) { 

      flatont.setStylesubarea1(s); 
     } 
     continue; 
    } else if (key.equals("Lips")) { 

     flatont.setStylearea1(key); 

     for (String s : temp) { 

      flatont.setStylesubarea1(s); 
     } 
     continue; 
    } 
} 

這woud仍然遍歷鍵即使一個已找到指定的密鑰。否則,做一個簡單的break

while (it.hasNext()) { 
    Map.Entry<String, Set<String>> entry = (Map.Entry<String, Set<String>>) it.next(); 
    String key = entry.getKey(); 
    Set<String> temp = arg0.getSubstylearea().get(key); 

    if (key.equals("Eyes")) { 
     flatont.setStylearea1(key); 
     System.out.println("This Doesnt Print"); 
     for (String s : temp) { 

      flatont.setStylesubarea1(s); 

     } 
     break; 
    } else if ... etc 
+0

嗨感謝您的回覆,休息無法正常工作,因爲我得到的價值只爲水合作用! –

+0

@RahulKoshaley ...「水化」...不在你的來源?它可以是繼續或休息。你的'休息A'相當於'繼續'。 –

+0

是的,它在我的來源,但它只選擇水化,而不是其他值。 –