ลดผลรวมเป็นปัญหาทั่วไปที่นักพัฒนาและผู้ที่ชื่นชอบการเขียนโปรแกรมหลายคนต้องเผชิญ ต้องมีความเข้าใจพื้นฐานของแนวคิดการเขียนโปรแกรม แม้ว่า Java จะเสนอวิธีการต่างๆ มากมายในการแก้ปัญหานี้ แต่ก็ยังสามารถพิสูจน์ได้ว่าเป็นงานที่ทำให้เกิดความสับสนสำหรับบางคน ในบทความนี้ เราจะเจาะลึกหนึ่งในวิธีแก้ปัญหาที่มีประสิทธิภาพมากที่สุดสำหรับปัญหาการลดผลรวมใน Java โดยอธิบายแต่ละส่วนของโค้ดทีละขั้นตอน ดังนั้นจึงทำให้เข้าใจได้ง่ายแม้กระทั่งสำหรับผู้เริ่มต้น
ปัญหาผลรวมที่ลดลง
ปัญหาการลดผลรวมโดยพื้นฐานแล้วเดือดลงมาเพื่อรวมตัวเลขในสตรีมตัวเลข ปัญหาอาจมีรูปแบบที่แตกต่างกัน อาจเป็นการรวมองค์ประกอบของอาร์เรย์ องค์ประกอบของ LinkedList หรือองค์ประกอบของการรวมของ Stream ในสภาพแวดล้อมแบบมัลติเธรดซึ่งใช้ฟังก์ชัน `stream.reduce()` มันใช้นิพจน์แลมบ์ดาและอินเทอร์เฟซการทำงานซึ่งเป็นคุณสมบัติที่สำคัญของ Java 8 ขึ้นไป
โซลูชันจาวา
Java จัดเตรียมอาร์เรย์ของไลบรารีและฟังก์ชันต่างๆ เพื่อจัดการและแก้ไขปัญหาได้อย่างง่ายดาย เราจะใช้ Stream API ที่เปิดตัวใน Java 8 โดยเฉพาะอย่างยิ่งเมธอด `reduce()` ซึ่งรวมองค์ประกอบของสตรีมเพื่อให้ได้ผลลัพธ์สรุปเดียว
นี่คือโค้ด Java ตัวอย่างที่ต้องทำ
public int sumOfArray(Integer[] numbers) { return Arrays.stream(numbers) .reduce(0, Integer::sum); }
คำอธิบายทีละขั้นตอนของรหัส
โค้ดด้านบนแสดงถึงวิธีการที่รับอาร์เรย์ของจำนวนเต็มเป็นอาร์กิวเมนต์และส่งกลับผลรวมของจำนวนเต็มเหล่านี้
- ขั้นแรก `Arrays.stream(numbers)` จะแปลงอาร์เรย์ให้เป็นสตรีม
- จากนั้นจะเรียกใช้เมธอด `reduce()` ในสตรีมนี้ วิธีการนี้ใช้พารามิเตอร์สองตัว ได้แก่ ค่าเริ่มต้นของผลรวม และวิธีการที่จะใช้ในการคำนวณผลรวม
- ค่าเริ่มต้นในกรณีนี้คือ '0' และวิธีการที่ใช้คือ 'จำนวนเต็ม::sum' `Integer::sum` คือการอ้างอิงถึงวิธีการคงที่ `sum` ในคลาส Integer วิธีการนี้จะคืนค่าผลรวมของอาร์กิวเมนต์ กำลังถูกส่งผ่านเป็นการอ้างอิงวิธีการไปยังวิธีการลด
- จากนั้นฟังก์ชัน `reduce()` จะดำเนินการผลรวมกับแต่ละองค์ประกอบในสตรีม จากนั้นผลรวมจะถูกส่งกลับตามผลลัพธ์ของฟังก์ชัน
Java Libraries และฟังก์ชันที่คล้ายกัน
Java มีไลบรารีมากมายที่สามารถช่วยคุณจัดการและดำเนินการบนสตรีมได้ ฟังก์ชันที่คล้ายกันในการ 'ลด' ได้แก่ 'รวบรวม', 'นับ', 'จับคู่', 'ค้นหา', 'วนซ้ำ' และอื่นๆ โดยขึ้นอยู่กับการดำเนินการที่ต้องดำเนินการในสตรีม
จากภาพประกอบนี้ เราจะเห็นว่า Java มีเครื่องมือที่มีประสิทธิภาพและยืดหยุ่นในการแก้ปัญหาที่ซับซ้อน เหมือนกับปัญหาการลดผลรวม เป็นข้อพิสูจน์ถึงความเก่งกาจและความแข็งแกร่งของภาษา