Joiner ของ Guava: จัดการ join string/oject ง่ายกว่า String.join()
Maven: com.google.guava:guava:32.1.3-jre (หรือเวอร์ชันใหม่กว่า)
ตัวอย่าง
import com.google.common.base.Joiner;
import java.util.*;
public class Demo {
public static void main(String[] args) {
String[] arr = {"hel", null, "lo", "wo", "r", null, "ld"};
System.out.println("Original: " + Arrays.toString(arr));
// ข้าม null, ใช้ + เป็น delimiter
String result = Joiner.on('+').skipNulls().join(arr);
System.out.println("Joined (skipNulls): " + result);
// ใช้สำหรับ null
String result2 = Joiner.on('+').useForNull("NULL").join(arr);
System.out.println("Joined (useForNull): " + result2);
// กับ Iterable
List list = Arrays.asList("a", "b", "c");
System.out.println("List joined: " + Joiner.on("-").join(list));
// MapJoiner สำหรับ Map
Map map = Map.of("a", 1, "b", 2);
String mapStr = Joiner.on(",").withKeyValueSeparator("=").join(map);
System.out.println("Map joined: " + mapStr); // a=1,b=2
}
}
ผลลัพธ์
Original: [hel, null, lo, wo, r, null, ld] Joined (skipNulls): hel+lo+wo+r+ld Joined (useForNull): hel+NULL+lo+wo+r+NULL+ld List joined: a-b-c Map joined: a=1,b=2
คุณสมบัติเด่น
skipNulls()- ข้าม null ไม่ใส่ในผลลัพธ์useForNull(String)- แทนที่ null ด้วยสตริงที่กำหนดwithKeyValueSeparator(String)- สำหรับ Map (key=value)- Thread-safe, immutable
- ประสิทธิภาพดีกว่า String.join() สำหรับกรณีซับซ้อน
เปรียบเทียบกับ String.join() (Java 8+)
String.join("+", "a", "b", "c") ใช้ได้สำหรับกรณีง่าย แต่ไม่มี skipNulls, useForNull, MapJoiner