การแปลงระหว่างรายการและชุดใน Java

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 ดังนั้นจึงควรนำเข้าและเรียกใช้งานได้ง่ายเหมือนเดิม