常用Iterator遍歷,篩選小記

2021-09-10 04:46:49 字數 2970 閱讀 8505

下面給個示例

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 使用者可以...