簡體   English   中英

Java:如何將 for 循環中的第一個值分配給變量?

[英]Java: How do I assign the first value in a for loop to the variable?

我有一個Info類型的List ,其中包含成員字段StringMap<String, Set<String>> 我需要遍歷Set<String> s。 我是否可以將第一個Set<String>分配給一個變量並對其自身和每個key的剩余值執行操作?

我是 Java 的新手,所以這可能沒有正確表達。

我試過的。 鑒於我的情況已被理解,在這里使用entrySet()是否正確還是info.getInfoMap.values()就足夠了?

for (Info info : listOfInfo) {

      for (Map.Entry<String, Set<String>> entry : info.getInfoMap().entrySet()) {

        final Set<String> firstSetValue = entry.getValue();
        Set<String> set = entry.getValue();

        // do something to remaining sets with the first set
        // firstSetValue.equals(set)
        // firstSetValue.containsAll(set)


      }

假設這些集合不能是 null (並且使用var ,這是您在迭代 entrySets 時幾乎總是想要使用的東西):

Set<String> firstSet = null;

for (Info info : listOfInfo) {
   for (var entry : info.getInfoMap().entrySet()) {
       if (firstSet == null) firstSet = entry.getValue();
       // more here
    }
}

您的代碼不起作用:每個循環都會執行 firstSetValue = line。 使其final沒有任何改變:java spring 中的變量在您聲明它們並在它們的“范圍”用完時消失時就存在了,並且{}的范圍是最接近的。 換句話說,當內部的 for 循環循環時,一個新的firstSetVariable噗地存在,然后在標記循環結束的}處,它噗地一聲消失了,然后假設循環再次循環,噗,完全有一個新的firstSetVariable 因此,它們不會“記住”第一個值,因為它們是全新的,並且將它們標記為final沒有任何區別(它工作正常:它們的值確實永遠不會改變,因此它們可以被標記為 final。相反,整個變量會彈出並在每個循環中重新存在)。

您只需要將變量存儲在循環之外。 立即想到的兩種方法:

Set<Map.Entry<String, Set<String>> entrySet = info.getInfoMap().getEntrySet();
final Set<String> first = entrySet.iterator().next();

for (final Map.Entry<String, Set<String>> entry : entrySet) {
   ...
}

或者

Set<String> first = null;

for (final Map.Entry<String, Set<String>> entry : info.getInfoMap().getEntrySet()) {
    if (first == null) {
        first = entry.getValue();
    }

    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM