คำถามและคำตอบในการสัมภาษณ์ Java 8 Stream API

Mar 06 2023
สวัสดีผู้อ่าน หากคุณกำลังเตรียมตัวสำหรับการสัมภาษณ์ Java บทความนี้จะมีประโยชน์มากที่สุด เนื่องจากหลังจากการอัปเกรดเวอร์ชัน Java อย่างต่อเนื่อง คำถามสัมภาษณ์ก็เพิ่มขึ้นเช่นกัน

เฮ้รีดเดอร์

หากคุณกำลังเตรียมตัวสำหรับการสัมภาษณ์ Java บทความนี้จะมีประโยชน์มากที่สุด เนื่องจากหลังจากการอัปเกรดเวอร์ชัน Java อย่างต่อเนื่อง คำถามสัมภาษณ์ก็เพิ่มขึ้นเช่นกัน ที่นี่ ฉันได้แสดงรายการคำถามและคำตอบในการสัมภาษณ์ Java 8 Stream API ที่พบบ่อยที่สุด

เนื้อหาของบทความประกอบด้วยคำถามสัมภาษณ์ในหัวข้อต่อไปนี้พร้อมตัวอย่าง:

สตรีมคำถามและคำตอบสัมภาษณ์ API

สตรีม API

Stream API เป็นหนึ่งในหัวข้อยอดนิยมที่ผู้สัมภาษณ์เลือกในการสัมภาษณ์ ให้เราอ่านและทราบแนวคิดของคำถามสตรีม API ที่ใช้มากที่สุด ให้เราดูคำถามและคำตอบของ Stream API ของ Java 8

1. API สตรีมคืออะไร

  • Java 8 มีแพ็คเกจเพิ่มเติมใหม่ที่ชื่อว่าjava.util.streamแพ็คเกจนี้ประกอบด้วยคลาส อินเตอร์เฟส และ enums เพื่ออนุญาตการดำเนินการในรูปแบบการทำงานกับองค์ประกอบ
  • เราสามารถใช้ stream API โดยใช้แพ็คเกจjava.util.stream
  • เราสามารถใช้สตรีมเพื่อกรอง รวบรวม พิมพ์ และแปลงจากโครงสร้างข้อมูลหนึ่งไปยังอีกโครงสร้างหนึ่ง
  • Stream APIs ไม่เก็บองค์ประกอบ มันใช้งานได้จริง การดำเนินการที่ดำเนินการโดยใช้สตรีมไม่ได้แก้ไขแหล่งที่มา
  • ข้อแตกต่างที่สำคัญระหว่างคอลเล็กชันและสตรีมคือคอลเล็กชันมีองค์ประกอบแต่สตรีมไม่มี
  • สตรีมทำงานบนมุมมองที่จัดเก็บองค์ประกอบตามคอลเลกชันหรืออาร์เรย์ แต่ไม่เหมือนกับมุมมองอื่นๆ การเปลี่ยนแปลงใดๆ ที่เกิดขึ้นในสตรีมจะไม่สะท้อนถึงคอลเล็กชันดั้งเดิม
  • การดำเนินการขั้นกลางของสตรีม API จะประมวลผลข้อมูลปัจจุบันแล้วส่งคืนสตรีมใหม่
  • เมื่อมีการดำเนินการระหว่างกลาง จะสร้างกระแสใหม่เท่านั้น

4. การทำงานของเทอร์มินัลใน Stream API คืออะไร

  • ตามชื่อที่แนะนำ — เทอร์มินัลหมายถึงการดำเนินการล่าสุดในไปป์ไลน์สตรีม การทำงานของเทอร์มินัลจะข้ามสตรีมและสร้างผลลัพธ์หรือคอลเล็กชัน แต่ไม่ใช่สตรีมใหม่
  • ไปป์ไลน์ของสตรีมประกอบด้วยแหล่งที่มา (คอลเล็กชัน อาร์เรย์ ฟังก์ชัน หรือช่อง I/O) ซึ่งจะเรียกใช้การดำเนินการขั้นกลางในไปป์ไลน์ ซึ่งสุดท้ายแล้วการดำเนินการของเทอร์มินัลจะดำเนินการ ซึ่งทำให้สตรีมไปป์ไลน์ถูกใช้งานและทำเครื่องหมายว่าปิด
  • เราสามารถดำเนินการได้เพียงสถานีเดียวที่ส่วนท้ายของไปป์ไลน์ หากมีการดำเนินการใดๆ บนสตรีมแบบปิด จะส่งผลให้เป็นjava.lang.IllegalStateException; สตรีมได้เปิดใช้งานหรือปิดไปแล้ว
  • เก็บรวบรวม()
  • แต่ละ()
  • สำหรับการสั่งซื้อแต่ละครั้ง ()
  • ค้นหาใด ๆ ()
  • ค้นหาก่อน()
  • toArray()
  • ลด()
  • นับ()
  • นาที()
  • สูงสุด ()
  • จับคู่ใด ๆ ()
  • allMatch()
  • ไม่ตรงกัน()
  • ฟังก์ชัน map() ดำเนินการเกี่ยวกับการทำงานของแผนที่ในภาษาจาวา ซึ่งหมายความว่าสามารถเปลี่ยนวัตถุประเภทหนึ่งเป็นวัตถุประเภทอื่นได้
  • ตัวอย่าง:พิจารณาว่าเรามีรายการของ Strings และต้องการแปลงรายการของจำนวนเต็ม เราสามารถใช้ map() โดยการใช้ฟังก์ชันเพื่อแปลง String เป็นจำนวนเต็ม เช่น: parseInt() เป็น map() และจะนำไปใช้กับองค์ประกอบทั้งหมด ของรายการและให้รายการจำนวนเต็ม
  • วิธีการกรองใช้เพื่อกรององค์ประกอบที่ตรงตามเงื่อนไขที่ระบุโดยใช้ฟังก์ชันเพรดิเคต
  • ฟังก์ชันเพรดิเคตคืออะไร แต่เป็นฟังก์ชันที่รับค่า Object และคืนค่าบูลีน
  • ตัวอย่างเช่น หากคุณมีรายการจำนวนเต็มและคุณต้องการรายการจำนวนเต็มคู่
  • ฟังก์ชัน flatMap() เป็นส่วนเสริมของฟังก์ชันแผนที่ นอกเหนือจากการถ่ายโอนวัตถุหนึ่งไปยังอีกวัตถุหนึ่งแล้ว มันยังทำให้วัตถุนั้นแบนราบอีกด้วย
  • ตัวอย่าง:พิจารณาว่า คุณมีรายการของข้อมูลรายการ และคุณต้องการรวมองค์ประกอบทั้งหมดของรายการไว้ในรายการเดียว ในกรณีนี้ เราสามารถใช้ flatMap()
  • เพรดิเคตเป็นส่วนต่อประสานการทำงานที่แสดงถึงฟังก์ชัน ซึ่งรับออบเจกต์และส่งกลับค่าบูลีน
  • ใช้ในวิธีการสตรีมหลายวิธี เช่น filter() ซึ่งใช้ Predicate เพื่อกรององค์ประกอบที่ไม่ต้องการ
  • วิธีการ peek() ของคลาส Stream ช่วยให้เราเห็นผ่าน Stream ไปป์ไลน์
  • เราสามารถดูแต่ละขั้นตอนและพิมพ์ข้อความที่มีความหมายบนคอนโซล โดยทั่วไปจะใช้สำหรับการดีบักปัญหาที่เกี่ยวข้องกับการแสดงออกของแลมบ์ดาและการประมวลผลสตรีม

ข้อแตกต่างที่สำคัญระหว่าง map() กับ flatMap() ใน Java 8:

  • ฟังก์ชันที่คุณส่งไปยังการดำเนินการ map() จะส่งคืนค่าเดียว
  • ฟังก์ชันที่คุณส่งไปยังการดำเนินการ flatMap() จะส่งคืนสตรีมของค่า
  • flatMap() เป็นการผสมผสานระหว่างแผนที่และการทำงานแบบแฟลต
  • map() ใช้สำหรับการแปลงเท่านั้น แต่ flatMap() ใช้สำหรับทั้งการแปลงและการทำให้แบนราบ

ตัวอย่างสำหรับ flatMap():

11. เราสามารถแปลง Array เป็น Stream ได้หรือไม่?

  • ได้ คุณสามารถใช้ Java เพื่อแปลงอาร์เรย์เป็นสตรีมได้
  • คลาส Stream มีเมธอดจากโรงงานในการสร้าง Stream จากอาร์เรย์ เช่น Stream.of(T…) ซึ่งรับพารามิเตอร์ตัวแปร นอกจากนี้ เรายังสามารถจัดหาอาร์เรย์ให้กับมันได้

12. Stream API และ Collection API แตกต่างกันอย่างไร

13. การดำเนินการขั้นกลางแบบไร้สถานะและไร้สถานะของ Stream API คืออะไร

  • การดำเนินการ stateful คือข้าม (), แตกต่าง (), จำกัด () และ sorted () พักการดำเนินการสตรีมอื่น ๆ ทั้งหมดจะไม่มีสถานะ
  • เมื่อการดำเนินการจำเป็นต้องรักษาข้อมูลขององค์ประกอบที่ประมวลผลจนถึงตอนนี้เพื่อประมวลผลองค์ประกอบปัจจุบัน การดำเนินการนั้นจะเป็นการดำเนินการแบบมีสถานะ
  • ตัวอย่าง:การดำเนินการที่แตกต่างจำเป็นต้องติดตามค่าทั้งหมดที่มีการประมวลผลจนถึงตอนนี้ จากข้อมูลนี้เท่านั้นที่สามารถตัดสินใจได้ว่าค่าปัจจุบันไม่ซ้ำกันหรือได้รับการประมวลผลมาก่อน ดังนั้นจะเพิ่มค่าปัจจุบันให้กับสตรีมใหม่ ( ซึ่งเป็นเอาต์พุตของการดำเนินการที่แตกต่างกัน) หรือละเลยค่าและไม่เพิ่มลงในสตรีมใหม่
  • ตามชื่อที่แนะนำ เมธอด findFirst() ใช้เพื่อค้นหาองค์ประกอบแรกจากสตรีม ในขณะที่เมธอด findAny() ใช้เพื่อค้นหาองค์ประกอบใดๆ จากสตรีม
  • findFirst() ถูกกำหนดล่วงหน้าในขณะที่ findAny() ไม่ได้ถูกกำหนด ในการเขียนโปรแกรม กำหนดหมายถึงเอาต์พุตขึ้นอยู่กับอินพุตหรือสถานะเริ่มต้นของระบบ
  • หนึ่งในคุณสมบัติที่โดดเด่นของ Java 8 คือ Java Parallel Stream มีไว้สำหรับใช้คอร์ต่างๆ ของโปรเซสเซอร์
  • โดยปกติโค้ด Java ทั้งหมดจะมีสตรีมประมวลผลเพียงสตรีมเดียว ซึ่งจะดำเนินการตามลำดับ แต่ด้วยการใช้สตรีมแบบขนาน เราสามารถแยกโค้ด Java ออกเป็นมากกว่าหนึ่งสตรีม ซึ่งดำเนินการแบบขนานบนคอร์ที่แยกจากกัน และผลลัพธ์คือการรวมกันของผลลัพธ์แต่ละรายการ
  • คำสั่งที่พวกเขาถูกดำเนินการไม่ได้อยู่ในการควบคุมของเรา ดังนั้นจึงแนะนำให้ใช้สตรีมคู่ขนานเมื่อลำดับการดำเนินการของแต่ละรายการไม่ส่งผลต่อผลลัพธ์สุดท้าย

ขอบคุณที่อ่านบทความ โปรดตบมือ แชร์ และแสดงความคิดเห็น มันจะกระตุ้นให้ฉันเขียนบทความดังกล่าวมากขึ้น แบ่งปันคำแนะนำอันมีค่าของคุณ ฉันขอขอบคุณสำหรับความคิดเห็นที่ซื่อสัตย์ของคุณ!!!

สนับสนุนสิ่งพิมพ์ของเราโดยติดตาม

อ้างถึงบทความต่อไปนี้ด้วย

ทำความเข้าใจกับ CORS และช่วยปรับปรุงความปลอดภัยของเว็บ