1. ภาพรวม
ในบทความสั้น ๆ นี้เราจะดูการแปลงระหว่างรายการและชุดเริ่มต้นด้วย Plain Java โดยใช้ Guava และไลบรารี Apache Commons Collections และสุดท้ายด้วย Java 10
บทความนี้เป็นส่วนหนึ่งของซีรี่ส์“ Java - Back to Basic” ใน Baeldung
2. แปลงรายการเป็นชุด
2.1. ด้วย Plain Java
เริ่มต้นด้วยการแปลงจากรายการเป็นชุดโดยใช้ Java :
public void givenUsingCoreJava_whenListConvertedToSet_thenCorrect() { List sourceList = Arrays.asList(0, 1, 2, 3, 4, 5); Set targetSet = new HashSet(sourceList); }
อย่างที่คุณเห็นกระบวนการแปลงเป็นประเภทที่ปลอดภัยและตรงไปตรงมาเนื่องจากผู้สร้างของแต่ละคอลเล็กชันยอมรับคอลเล็กชันอื่นเป็นแหล่งที่มา
2.2. กับฝรั่ง
มาทำการแปลงเดียวกันโดยใช้ Guava:
public void givenUsingGuava_whenListConvertedToSet_thenCorrect() { List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5); Set targetSet = Sets.newHashSet(sourceList); }
2.3. ด้วย Apache Commons Collections
ต่อไปให้ใช้ Commons Collections API เพื่อแปลงระหว่างรายการและชุด :
public void givenUsingCommonsCollections_whenListConvertedToSet_thenCorrect() { List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5); Set targetSet = new HashSet(6); CollectionUtils.addAll(targetSet, sourceList); }
2.4. ด้วย Java 10
อีกทางเลือกหนึ่งคือการใช้วิธีSet.copyOf static factory ที่แนะนำใน Java 10:
public void givenUsingJava10_whenListConvertedToSet_thenCorrect() { List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5); Set targetSet = Set.copyOf(sourceList); }
โปรดทราบว่าชุดที่สร้างด้วยวิธีนี้ไม่สามารถแก้ไขได้
3. แปลงชุดเป็นรายการ
3.1. ด้วย Plain Java
ตอนนี้เรามาทำการแปลงย้อนกลับจากSet to a List - โดยใช้ Java :
public void givenUsingCoreJava_whenSetConvertedToList_thenCorrect() { Set sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = new ArrayList(sourceSet); }
3.2. กับฝรั่ง
และวิธีแก้ปัญหาฝรั่ง:
public void givenUsingGuava_whenSetConvertedToList_thenCorrect() { Set sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = Lists.newArrayList(sourceSet); }
คล้ายกับวิธีการของ java เพียง แต่มีโค้ดที่ซ้ำกันน้อยกว่าเล็กน้อย
3.3. ด้วย Apache Commons Collections
ตอนนี้เรามาดูโซลูชัน Commons Collections เพื่อแปลงระหว่างSetและList :
public void givenUsingCommonsCollections_whenSetConvertedToList_thenCorrect() { Set sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = new ArrayList(6); CollectionUtils.addAll(targetList, sourceSet); }
3.4. ด้วย Java 10
สุดท้ายเราสามารถใช้List.copyOfที่เปิดตัวใน Java 10:
public void givenUsingJava10_whenSetConvertedToList_thenCorrect() { Set sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = List.copyOf(sourceSet); }
เราต้องจำไว้ว่ารายการผลลัพธ์ไม่สามารถแก้ไขได้
4. สรุป
การใช้งานตัวอย่างและตัวอย่างโค้ดเหล่านี้สามารถพบได้บน GitHubซึ่งเป็นโครงการที่ใช้ Maven ดังนั้นจึงควรนำเข้าและเรียกใช้งานได้ง่ายเหมือนเดิม