ฉันสามารถใช้ได้new List(Collection2.filter())
แน่นอน แต่วิธีนี้ไม่รับประกันว่าการสั่งซื้อของฉันจะยังคงเหมือนเดิม
นี่ไม่เป็นความจริง Collections2.filter()
เป็นฟังก์ชันที่มีการประเมินอย่างเกียจคร้านซึ่งจะไม่กรองคอลเล็กชันของคุณจนกว่าคุณจะเริ่มเข้าถึงเวอร์ชันที่กรองแล้ว ตัวอย่างเช่นหากคุณวนซ้ำในเวอร์ชันที่กรองแล้วองค์ประกอบที่กรองแล้วจะปรากฏออกมาจากตัววนซ้ำตามลำดับเดียวกันกับคอลเล็กชันเดิมของคุณ (ลบด้วยสิ่งที่กรองออกอย่างเห็นได้ชัด)
บางทีคุณอาจคิดว่ามันทำหน้าที่กรองข้อมูลจากนั้นทิ้งผลลัพธ์ลงในคอลเลคชันบางรูปแบบโดยพลการและไม่มีการเรียงลำดับ แต่ก็ไม่ได้
ดังนั้นหากคุณใช้เอาต์พุตCollections2.filter()
เป็นอินพุตไปยังรายการใหม่คำสั่งซื้อเดิมของคุณจะยังคงอยู่
การใช้การนำเข้าแบบคงที่ (และLists.newArrayList
ฟังก์ชัน) จะค่อนข้างรวบรัด:
List filteredList = newArrayList(filter(originalList, predicate));
โปรดทราบว่าในขณะที่Collections2.filter
จะไม่กระหายย้ำกว่าคอลเลกชันพื้นฐานLists.newArrayList
จะ - ArrayList
มันจะดึงทุกองค์ประกอบของคอลเลกชันกรองและคัดลอกลงในใหม่