เขียนแล้วดูอ่านยาก แต่ก็ดูเป็นขั้นเป็นตอนดี code ดูสวย แต่อ่านยากจัง
Layer.setLayerId(
Optional.ofNullable(getCellValueAsString(sheet, i, 1)) // 1. ห่อค่าด้วย Optional (ป้องกัน null)
.filter(s -> s.matches("[0-9]+")) // 2. กรองเอาเฉพาะค่าที่เป็นตัวเลข
.map(Integer::parseInt) // 3. ถ้าผ่านเงื่อนไข แปลงเป็น Integer
.orElse(0) // 4. ถ้าไม่ผ่านเงื่อนไขใดๆ เลย ให้ใช้ค่า 0
);
เนื่องจากเราไม่อยาก จะเขียน code ในลักษณะข้างล่างนี้ (ถ้ามีค่าเดียวก็โอเค แต่ถ้าหลายค่าก็แย่หน่อย)
แต่มันก็ตรงไปตรงมาที่สุดแล้ว
// 1. ดึงค่าจากเซลล์มาเก็บในตัวแปรก่อน
String value = getCellValueAsString(sheet, i, 1);
// 2. ใช้ ternary operator เพื่อแปลงค่า
// ถ้า value เป็นตัวเลข ก็แปลงเป็น Integer, ถ้าไม่ใช่ ก็ให้เป็น 0
int layerId = (value != null && value.matches("[0-9]+")) ? Integer.parseInt(value) : 0;
// 3. กำหนดค่า ID
Layer.setLayerId(layerId);
เขียนแบบข้างล่างนี้ น่าจะง่ายที่สุด แต่ดันไปเรียกใช้งาน function 2 รอบ ถ้า function ซับซ้อน มันก็เสียเวลา ก็ดูแย่ไปหน่อย
// ⚠️ ไม่แนะนำ: เรียกฟังก์ชันซ้ำซ้อน
Layer.setLayerId(
getCellValueAsString(sheet, i, 1).matches("[0-9]+") ? Integer.parseInt(getCellValueAsString(sheet, i, 1)) : 0
);

