下面給個示例
class類:person,card, testforeach 共三個
person:property有姓名,卡片 兩個屬性
card:property 有cardcode 1個屬性
testforeach:主測試類
person**
public class person
public void setusername(string username)
public listgetcardlist()
public void setcardlist(listcardlist)
}
card**
public class card
public void setcardcode(string cardcode)
}
testforeach 測試類**
@slf4j
public class testforeach ",json.tojsonstring(person.getcardlist()));
// 1: 使用iterator進行遍歷
iterator iterator = person.getcardlist().iterator();
while (iterator.hasnext()) ", json.tojsonstring(c)); //列印每一次遍歷過來的元素
if ("1".equals(c.getcardcode()))
}log.info("最後過濾後的集合元素",json.tojsonstring(person.getcardlist()))
//2:通過 集合的 removeif 方法結合lambda表示式進行過濾,排除cardcode為:2的card物件
person.getcardlist().removeif(card4 -> "2".equals(card4.getcardcode()));
log.info("removeif方法排除後的{}", json.tojsonstring(person.getcardlist()));
//3:通過filter方法過濾,查詢出cardcode為:3的card物件
listcardlist = person.getcardlist().stream().filter(card5 -> "3".equals(card5.getcardcode())).collect(collectors.tolist());
log.info("第三次列印{}", json.tojsonstring(cardlist));
// log.info("第三次列印{}", json.tojsonstring(person.getcardlist()));
//4:foreach方法進行遍歷
listcardlist = person.getcardlist();
for (card card6:cardlist)
// 5:集合的foreach方法進行遍歷
cardlist.foreach(card7 -> system.out.println(json.tojsonstring(card7)));
}}
使用「::」來訪問類中的方法
jdk8中的雙冒號的用法,就是把方法當做引數傳到stream內部,使stream的每個元素都傳入到該方法裡面執行一下。
listcardlist = person.getcardlist();
for (card card3:cardlist)
// 上面的**跟下面的**等價
listcardlist = person.getcardlist();
cardlist.foreach(system.out::println);
// 上面的**跟下面的**等價
listcardlist = person.getcardlist();
cardlist.foreach(card5->);
//上面的**跟下面的**等價
consumermethodparam = system.out::println; //方法引數
cardlist.foreach(card6 -> methodparam.accept(card6));
注意一點:使用iterator 進行遍歷的時候,不能直接操作集合(list,vector)的add 或者remove操作。因為通過迭代器的remove方法進行操作。
@test
public void testiterator()
}system.err.println(memberlist); // 列印的是去除掉"hxy"的list集合
}
還有iterator.remove()方法試用於單執行緒,當出現多執行緒時,會報錯「concurrentmodificationexception」。如下**。
參考文件:
public class threadtest catch (interruptedexception e) }}
};thread thread2 = new thread() }};
thread1.start();
thread2.start();
}}
當我們把arraylist替換成併發容器 copyonwritearraylist時,也是會報錯。「unsupportedoperationexception」。
static listlist = new copyonwritearraylist<>();
檢視copyonwritearraylist#remove方法可知:該類不支援remove操作,當呼叫remove方法時,會直接丟擲異常。
public void remove()
OAF通過Iterator標準遍歷各行
這兩天本人接到客戶反映的bug oaf的採購訂單頁面,在新增超過10行提交後,會出現空指標異常。原來,oaf的預設顯示行數為10行,超過10行,頁面會分頁。報空指標異常,就是因為沒有取到分頁的行。之前的 am裡的某個方法 我是這樣寫的 zreqlinesvoimpl zreqvo this.getz...
篩選資料小實驗
1.先用rand 編寫乙個從1到33中任選6個不同數的程式,共一百多萬種情況。附件裡有這一百多萬種情況的資料,你可以看看 2.然後輸入我自己選的六個數,比如,5 9 14 21 27 28 3 20 23 26 30 33 7 14 18 19 23 25 等等等 會一起輸入150 500個這樣的資...
php中的iterator迭代器 遍歷
遍歷主要用於遍歷元素的操作,如對陣列中的每乙個元素都要操作,這個情況下我們就可以使用迭代器 inte ce demo 這裡描述了提供給開發者的介面 inte ce demo2 extends demo 這一步是為了隱藏介面的具體實現 class demo3 implements demo 使用者可以...