[英]Java: How do I assign the first value in a for loop to the variable?
我有一個Info
類型的List
,其中包含成員字段String
和Map<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.