แก้ไขแล้ว: ลดผลรวม

ลดผลรวมเป็นปัญหาทั่วไปที่นักพัฒนาและผู้ที่ชื่นชอบการเขียนโปรแกรมหลายคนต้องเผชิญ ต้องมีความเข้าใจพื้นฐานของแนวคิดการเขียนโปรแกรม แม้ว่า 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 มีเครื่องมือที่มีประสิทธิภาพและยืดหยุ่นในการแก้ปัญหาที่ซับซ้อน เหมือนกับปัญหาการลดผลรวม เป็นข้อพิสูจน์ถึงความเก่งกาจและความแข็งแกร่งของภาษา

กระทู้ที่เกี่ยวข้อง:

แสดงความคิดเห็น