วิธีปรับปรุงโค้ด Java ของคุณด้วย Streams
ที่มา:
Dev.to
สตรีมคืออะไร?
Streams ปรากฏตัวครั้งแรกใน Java 8 ตามเอกสารของ Oracle สตรีมเหล่านี้เป็นคลาสสำหรับรองรับการดำเนินการสไตล์ฟังก์ชันบนสตรีมขององค์ประกอบ เช่น การแปลงการลดแผนที่ในคอลเลกชัน กล่าวง่ายๆ ก็คือ สตรีมประกอบด้วยแหล่งข้อมูล ตามด้วยการดำเนินการระดับกลางเป็นศูนย์หรือมากกว่านั้น ตามด้วยการดำเนินการเทอร์มินัล
แหล่งข้อมูลคืออะไร?
- คอลเลกชัน รายการ เซต ints ยาว คู่ อาร์เรย์ บรรทัดไฟล์
การดำเนินการระดับกลางคืออะไร?
- ตัวกรอง แผนที่ การเรียงลำดับ ฯลฯ
- การดำเนินการเหล่านี้ส่งคืนสตรีมเพื่อให้สามารถเชื่อมโยงกับการดำเนินการอื่นได้
การทำงานของเทอร์มินัลคืออะไร?
- สำหรับแต่ละ รวบรวม ลด ค้นหาก่อน ฯลฯ
- พวกเขาส่งคืนผลลัพธ์ที่ไม่ถูกต้องหรือไม่ใช่สตรีม
- ถ้าเธรดไม่มีการดำเนินการของเทอร์มินัล ตัวกลางจะไม่ถูกเรียก
มาแปลงฟังก์ชันจากรูปแบบความจำเป็นเป็นรูปแบบการประกาศโดยใช้ Streams
ฟังก์ชันที่จำเป็น (ไม่มีสตรีม):
private int getResult_imperative(List<String> strings) {
int result = 0;
for (String string : strings){
if(isDigit(string.charAt(0))) continue;
if (string.contains("_")) continue;
result += string.length();
}
return result;
}
ที่นี่เราสังเกตเห็นว่าเราต้องทำบางสิ่งด้วยตนเอง:
- ประกาศตัวแปรผลลัพธ์เพื่อติดตามผลลัพธ์
- วนซ้ำผ่านสตริง
- เขียนคำสั่ง ifสอง คำสั่ง (ซึ่งอาจซับซ้อนกว่าในกรณีนี้มาก)
- เพิ่มความยาวของแต่ละผลลัพธ์
มาตรวจสอบรูปแบบการประกาศ (สตรีม):
private int getResult_Declarative(List<String> strings){
return strings.
stream().
filter(s -> !isDigit(s.charAt(0))).
filter(s -> !s.contains("_")).
mapToInt(String::length).
sum();
}
แล้วความแตกต่างคืออะไร?
- เราได้รับวัตถุ Stream โดยการเรียกใช้ฟังก์ชันstream()
- (การดำเนินการระดับกลาง)เราใช้ฟังก์ชันตัวกรองสองครั้ง - แต่ละครั้งเราจะระบุเงื่อนไขที่ต้องเป็นไปตามองค์ประกอบเหล่านั้นที่เราต้องการย้ายไปในระยะต่อไปเท่านั้น
- (การดำเนินการระดับกลาง)เราแมปแต่ละ ออบเจ็กต์ Stringกับint โดยการเรียก เมธอดlength (โดยใช้สไตล์การอ้างอิงเมธอด)
- (การดำเนินการเทอร์มินัล)รวมค่าint ก่อนหน้าทั้งหมด
ข้อสังเกต
วิธีที่สองดูง่ายกว่านี้ไม่ใช่หรือ? เราระบุ สิ่งที่ เรา
ต้องการ ไม่ใช่วิธีที่เราต้องการจะทำ นี่คือจิตวิญญาณของการเขียนโปรแกรมแบบประกาศและเป้าหมายของ Stream API ในแอปพลิเคชัน Java สมัยใหม่
ห้าปลั๊กอิน IntelliJ IDEA ที่ดีที่สุดสำหรับนักพัฒนา Java
ที่มา: ปลั๊กอิน
GitHubมีประโยชน์มากในหลาย ๆ สถานการณ์เมื่อทำงานกับโค้ดเป็นประจำ พวกเขาสามารถขยายฟังก์ชันการทำงานหลัก ให้การบูรณาการที่หลากหลาย และสนับสนุนระบบอัตโนมัติของงานต่างๆ มากมาย นี่คือปลั๊กอินที่ดีที่สุดในความคิดของฉัน:
โซนาร์ลินท์
SonarLint ช่วยให้คุณแก้ไขข้อผิดพลาดและช่องโหว่เมื่อเขียนโค้ด โดยจะเน้นปัญหาการเขียนโค้ดแบบเรียลไทม์ โดยให้คำแนะนำที่ชัดเจนแก่นักพัฒนาเกี่ยวกับวิธีการแก้ไข เพื่อให้คุณสามารถแก้ไขได้ก่อนที่จะคอมมิตโค้ด ปลั๊กอินนี้จำเป็นเนื่องจากช่วยปรับปรุงการเขียนโค้ดได้อย่างมาก
ผู้ช่วยมาเวน
ฉันหวังว่าคุณจะใช้ Maven? ฉันทำ! ปลั๊กอิน Maven Helper ให้:
- วิธีง่ายๆ ในการวิเคราะห์และกำจัดการพึ่งพาที่ขัดแย้งกัน
- วิธีง่ายๆ ในการค้นหาการขึ้นต่อกันโดยตรงหรือแบบสกรรมกริยา
- ขั้นตอนในการรัน/ดีบักเป้าหมาย maven สำหรับโมดูลที่มีไฟล์ปัจจุบัน หรือในโมดูลรูท
- การดำเนินการเพื่อเปิดเทอร์มินัลที่เส้นทางปัจจุบันไปยังโมดูล maven
- การดำเนินการเพื่อรัน/ดีบักไฟล์ทดสอบปัจจุบัน หากมีการกำหนดค่า maven-surefire-plugin ให้ข้ามหรือยกเว้นการทดสอบ เป้าหมาย "ยืนยัน" จะถูกนำมาใช้ รูปแบบ การกำหนดค่าต่างๆ สามารถพบได้บน GitHub
โค้ดเมตริก
ปลั๊กอินนี้มีตัวบ่งชี้แท็บตามการคำนวณความยากแบบกำหนดเองสำหรับไฟล์ Java พวกเขาให้คำแนะนำแก่นักพัฒนาในคลาสและวิธีการต่างๆ เพื่อให้เขาสามารถระบุสิ่งที่ต้องตรวจสอบได้อย่างง่ายดาย แม้ว่านี่จะไม่ใช่เมตริกมาตรฐาน แต่ก็เป็นการประมาณที่ใกล้เคียงกับ
ความซับซ้อนของไซโคลมาติก คุณยังสามารถปรับแต่งการคำนวณความซับซ้อนสำหรับโครงการได้โดยการเปลี่ยนรายการการกำหนดค่าที่เหมาะสม
การจัดการสตริง
การสลับเคส การเรียงลำดับ การกรอง การซูม การจัดแนวคอลัมน์ การเกรปปิ้ง การ Escape การเข้ารหัส และอื่นๆ อีกมากมาย...
เจพีเอ บัดดี้
JPA Buddy ทำให้ทุกสิ่งที่เกี่ยวข้องกับ JPA ง่ายและรวดเร็ว มีเครื่องมือที่จะช่วยคุณทำงานกับ Hibernate, Spring Data JPA, Liquibase, Flyway
คุณสมบัติที่สำคัญของ JPA Buddy:
- เอนทิตี JPA: สร้างและแก้ไขเอนทิตี คุณลักษณะเอนทิตี การเรียกกลับวงจรชีวิต ดัชนี และข้อจำกัด รองรับตัวแปลง JPA และประเภทกำหนดเองของไฮเบอร์เนต ความสามารถในการใช้คำอธิบายประกอบลอมบอกสำหรับเอนทิตี
- สร้างการใช้งานที่ถูกต้องของวิธีการเท่ากับ, hashCode และ toString สำหรับเอนทิตี JPA
- เจตนาซอร์สโค้ด การตรวจสอบ และการแก้ไขด่วนสำหรับการประกาศเอนทิตี JPA
- แสดงความสัมพันธ์เอนทิตีแบบกราฟิกในแผงโครงสร้าง JPA ใต้โหนดหน่วยถาวร
- การสร้างบันทึกการเปลี่ยนแปลง Liquibase โดยอัตโนมัติและการโยกย้ายเวอร์ชัน Flyway: การเปรียบเทียบระหว่างฐานข้อมูลกับฐานข้อมูล โมเดลต่อฐานข้อมูล การเปรียบเทียบระหว่างโมเดลกับสแนปชอต
- ผู้ออกแบบบันทึกการเปลี่ยนแปลง Visual Liquibase และความช่วยเหลือด้านการเขียนโค้ด: การสร้างและแก้ไขรายการ การอ้างอิงชื่อตาราง ชื่อคอลัมน์ ไฟล์ที่รวมไว้ และอื่นๆ
- การดำเนินการ: สร้างสแน็ปช็อตของ Liquibase ดำเนินการคำสั่ง “Liquibase update” และ “Liquibase updateSQL”
- Spring Data Repositories: การสร้างที่เก็บข้อมูล การสร้างวิธีการเก็บข้อมูล การแก้ไขคุณสมบัติของวิธีการ การสร้างการฉายภาพตามคลาสเอนทิตี การแตกแบบสอบถาม JPQL
- Kotlin: นักออกแบบภาพทุกคนรองรับการสร้างโค้ดสำหรับอ็อบเจ็กต์และที่เก็บ Kotlin อย่างสมบูรณ์
ฉันพูดถึงปลั๊กอินห้าอันดับแรก แต่ฉันมีอีกหนึ่ง...
ไอคอนพิเศษ
นี่คือคอลเลกชันไอคอนที่เพิ่มทางลัดไปยังไฟล์ต่างๆ เช่น Markdown, Yaml, Maven, Git และอื่นๆ อีกมากมาย คุณจะคุ้นเคยกับสิ่งเหล่านี้เนื่องจากช่วยให้คุณจดจำไฟล์ได้อย่างง่ายดาย คุณจะต้องการมันอย่างแน่นอน
GO TO FULL VERSION