ฉันจำได้ว่าในระหว่างการค้นหางานก่อนหน้านี้ฉันพบผู้สัมภาษณ์ที่ถามคำถามพื้นฐานมาก คำถามคือ: มี 10 องค์ประกอบในรายการและฉันต้องการลบ 3 องค์ประกอบจากมันตอนนี้ ฉันจะทำอย่างไร? ฉันไม่ได้คิดถึงมันในเวลานั้นดังนั้นฉันจึงบอกว่ารายการมีวิธีการลบของตัวเองซึ่งสามารถใช้โดยตรง เขากล่าวว่าโปรดอธิบายอย่างละเอียด ฉันบอกว่าฉันต้องการเขียน A for loop จำนวนลูปคือความยาวของรายการและจากนั้นลบองค์ประกอบที่คุณต้องการลบโดยตรงในลูป
ในเวลานั้นฉันคิดและถามคำถามง่ายๆเช่นนี้ ผู้สัมภาษณ์กล่าวว่า "คุณสามารถลองด้วยตัวเองเมื่อคุณกลับไปดูว่าคุณจะรายงานข้อผิดพลาดหรือไม่ถ้าคุณเขียนตามที่คุณพูดจากนั้นฉันก็สับสนแม้ว่านี่จะเป็นคำถามง่ายๆฉันไม่เคยให้ความสนใจกับรายละเอียดเล็ก ๆ น้อย ๆ ในการเข้ารหัสรายวันและผลการสัมภาษณ์สามารถจินตนาการได้
หลังจากที่ฉันกลับไปฉันลองครั้งเดียวและมันรายงานข้อผิดพลาดจริงๆ มันกลับกลายเป็นว่าการดำเนินการในรายการไม่ได้รับการแก้ไขในระหว่างการสำรวจไม่ว่าจะถูกลบหรือเพิ่มเพราะหากมีการเพิ่มองค์ประกอบใหม่ลงในคอลเลกชันในระหว่างการสำรวจมันจะทำให้เกิดการวนซ้ำ นอกจากนี้หากองค์ประกอบถูกลบในระหว่างการสำรวจมันจะทำให้เกิดปัญหาเช่นการข้ามขอบเขตของตารางต่อไปนี้ในการสำรวจ วิธีการใช้งานทั่วไปคือฟังก์ชั่นที่ใช้ผ่านวิธี Addall และวิธีการลบล้าง
ตัวอย่างเช่นสิ่งต่อไปนี้
@TestPublic เป็นโมฆะ MyTestLeArnmore () {รายการ <String> testList = new ArrayList <> (); testlist.add ("1 หยาง"); testlist.add ("1 li"); testlist.add ("1 Wang"); testlist.add ("1 จาง"); testlist.add ("2 หยาง"); testlist.add ("2 Sun"); testlist.add ("2 zhao"); รายการ <String> TEMADDLIST = arrayList ใหม่ <> (); สำหรับ (การทดสอบสตริง: testList) {if (test.startswith ("1")) {temaddlist.add (ทดสอบ); }} testList.removeAll (temaddlist); System.out.println (json.tojsonstring (testList));}ผลการพิมพ์คือ: ["2 Yang", "2 Suns", "2 Zhao"]
นี่เป็นวิธีที่แท้จริงในการใช้งาน อย่างไรก็ตามสิ่งที่ฉันต้องการพูดคุยเกี่ยวกับวันนี้คือวิธีการรวบรวมใหม่ของ Java 8 ตัวอย่างเช่นก่อนอื่นสร้างคอลเลกชันชั่วคราวจากนั้นใส่องค์ประกอบที่ต้องลบออกเป็นคอลเลกชันชั่วคราวผ่าน Traversal และในที่สุดก็ลบออกจากคอลเลกชันดั้งเดิมโดยรวม ด้วยวิธีนี้คุณต้องเขียนรหัสห้าหรือหกบรรทัดและคุณสามารถทำได้ด้วยรหัสหนึ่งบรรทัดใน Java 8 นี่คือบรรทัดของรหัสต่อไปนี้:
testList.removeif (test-> test.startswith ("1"));ความหมายของรหัสนี้คือการลบองค์ประกอบที่สอดคล้องกับรูปแบบพารามิเตอร์ remverif ดังนั้นหากคุณพิมพ์รายการทดสอบหลังจากรหัสบรรทัดนี้คุณจะไม่พิมพ์องค์ประกอบที่เริ่มต้นด้วย 1
รายละเอียดเล็ก ๆ เหล่านี้สะสมอยู่ในกระบวนการเข้ารหัสรายวัน หากมีข้อผิดพลาดมากเกินไปคุณจะให้ความสนใจกับมันเมื่อเขียนในภายหลัง เช่นเดียวกับเมื่อใช้ Equals ใน Java คุณมักจะใส่ค่าคงที่ที่รู้จักไว้ด้านหน้าเท่ากับเพื่อป้องกันข้อยกเว้นตัวชี้โมฆะ เมื่อใช้นิพจน์แลมบ์ดาสำหรับคอลเลกชันคุณต้องตัดสินก่อนว่าคอลเลกชันนั้นเป็นโมฆะผ่าน objects.nonnull () เมื่อพิมพ์วัตถุอย่าเรียกวิธีการ ToString () ของวัตถุโดยตรง คุณต้องผ่านวิธีการ toString วัตถุของวัตถุเพื่อให้แม้ว่าวัตถุนั้นเป็นโมฆะคุณสามารถพิมพ์ออกมาได้ คลาส Objects เป็นคลาสเครื่องมือใหม่ที่เพิ่มใน Java7
สรุป
ข้างต้นเป็นวิธีการที่เพิ่มขึ้นใหม่ของ Java8 ในคอลเลกชันที่แนะนำโดยตัวแก้ไขเพื่อ removeIF ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉัน บรรณาธิการจะตอบกลับทุกคนในเวลา!