JavaRush /จาวาบล็อก /Random-TH /แลมบ์ดาและลำธาร ฝึกฝนเท่านั้น ไม่มีทฤษฎี

แลมบ์ดาและลำธาร ฝึกฝนเท่านั้น ไม่มีทฤษฎี

เผยแพร่ในกลุ่ม
สวัสดีทุกคน. เนื่องในโอกาสการแข่งขัน ฉันตัดสินใจที่จะเขียนไม่ใช่บทความที่นี่ แต่เป็นบทเรียนสั้นๆ มันจะเกี่ยวกับแลมบ์ดาและสตรีมในภาษาชวา หากคุณคุ้นเคยและใช้งานมันอยู่แล้ว ให้ข้ามไปที่ตอนท้ายของบทความได้เลย จะมีงานเล็กๆ น้อยๆ ให้เลือกใช้งานกับ JavaRush ที่คุณสามารถฝึกฝนได้ คุณต้องมี Java 8 ขึ้นไป การฝึกอบรมจาก JR จะมีรายละเอียดเล็กน้อยและสิ่งที่เข้าใจยากมากมาย มีความปรารถนาอย่างแรงกล้าที่จะคิดออก เริ่มต้นด้วยความจริงที่ว่าฉันจะไม่อธิบายประวัติความเป็นมาของการปรากฏตัวของแลมบ์ดาและลำธารฉันแค่ไม่รู้ด้วยตัวเอง ฉันรู้แค่ว่ามันมาจากสไตล์การเขียนโปรแกรมเชิงฟังก์ชัน ไปจนถึงสไตล์ OOP ของเรา จากประสบการณ์การเรียนรู้สั้นๆ ของฉัน ฉันเพียงแค่แสดงให้เห็นว่าอย่างไรและอย่างไร บางคนพบว่ามันยากที่จะเข้าใจแนวคิดนี้ ดังนั้นเพียงจำไว้ว่าต้องเขียนอย่างไร คุณจะเข้าใจในภายหลัง

แลมบ์ดา

แลมบ์ดาและลำธาร ฝึกฝนเท่านั้น ไม่มีทฤษฎี - 1แลมบ์ดาและลำธาร ฝึกฝนเท่านั้น ไม่มีทฤษฎี - 2หากคุณไม่รู้ว่าแลมบ์ดาคืออะไร: แลมบ์ดาจะมีหน้าตาดังนี้:
(a, b) -> a.compareTo(b)
(переменные) -> действие
นั่นก็เพียงพอแล้วสำหรับตอนนี้ คุณสามารถอ่านทฤษฎีได้ที่นี่: ลิงค์หนึ่งลิงค์สองแต่ฉันคิดว่าการฝึกฝนสนุกกว่ามาก ฉันขอแนะนำให้คุณแก้ไขปัญหาต่อไปนี้: เขียนเครื่องคิดเลขโดยใช้วิธีที่ 1 วิธีการนี้ควรยอมรับค่าดิจิทัล 2 ค่าและอย่างอื่น รหัสของคุณจะมีลักษณะดังนี้:
class Lambda{
    public static void main (String[] args) {
	}

    public static double calculate(){
       	return null;
    }
}
คุณต้องป้อนพารามิเตอร์ 3 ตัวในลายเซ็นเมธอดcalculateเพิ่ม 1 คำสั่งในreturnและทดสอบการเรียกเมธอดนี้mainใน วิธีนี้สามารถทำอะไรได้บ้าง?
  • พับ;
  • คูณ;
  • แบ่ง;
  • ลบ;
  • คำนวณราก
  • ยกอำนาจ;
  • เพิ่มพลังให้กับผลรวมของการโต้แย้งหารด้วยตัวเลขแรก + 117;
  • และการดำเนินการอื่นๆ ทั้งหมดที่คุณนึกออก
สิ่งที่ไม่ควรใช้:
  • if-else;
  • charเป็นตัวบ่งชี้การดำเนินงาน
  • switch-case;
  • และทุกสิ่งทุกอย่างที่อยู่ในใจของคุณ
คุณสามารถใช้อะไรได้บ้าง:
  • เฉพาะแลมบ์ดาเท่านั้น ภารกิจอยู่ที่พวกมัน
- อะไร? และมันคือทั้งหมดเหรอ? - ใช่ เพียงเท่านี้ เพราะคุณจำเป็นต้องเพิ่ม 3 บรรทัดจริงๆ หากฉันแนะนำอย่างน้อย 1 บรรทัด ส่วนที่เหลือจะถูกเขียนโดยอัตโนมัติ และถ้าคุณต้องการคุณสามารถ google ตัวอย่างและพยายามทำความเข้าใจได้ แน่นอนคุณจะตรวจสอบตัวเองและถ้าคุณโกงไม่มีใครรู้ แต่ทำไม? หลังจากแก้ไขปัญหาง่ายๆ ดังกล่าวแล้ว นักเรียน 1.5 คนของฉันทุกคนก็เข้าใจคร่าวๆ ว่าแลมบ์ดาคืออะไรและใช้งานอย่างไร นี่จะจำเป็นมากสำหรับการสตรีม หากคุณต้องการคุยโวเกี่ยวกับผลลัพธ์และดูว่าคุณทำถูกต้องหรือไม่ ให้ส่งรหัสไปในข้อความส่วนตัว ไม่จำเป็นต้องแสดงความคิดเห็น คุณสามารถเพิ่มเคล็ดลับที่น่าสนใจได้ (แต่ในลักษณะที่จะไม่ทำให้งานง่ายเกินไป) หลังจากแก้ไขตัวอย่างนี้แล้ว คุณควรมีความเข้าใจคร่าวๆ เกี่ยวกับวิธีการใช้แลมบ์ดาอยู่แล้ว
แลมบ์ดาและลำธาร ฝึกฝนเท่านั้น ไม่มีทฤษฎี - 3
ตอนนี้เรามาดูสตรีม Java กันดีกว่า สิ่งเหล่านี้ไม่ใช่กระแสที่คุณผู้อ่านอาจนึกถึง ไม่มันไม่ใช่inputStreamและไม่ใช่ OutputStreamมันแตกต่าง มันน่าสนใจมากขึ้น สตรีมได้เข้ามาแทนที่วัฏจักร ไม่สมบูรณ์ แต่ยังคงอยู่ พวกเขามีคติประจำใจว่า “อย่าอธิบายว่าต้องทำอย่างไร อธิบายว่าต้องทำอย่างไร” ตัวอย่างเล็กๆ น้อยๆ ของสตรีม:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList.stream()
    .filter(s -> s.startsWith("c"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);
เกิดอะไรขึ้นที่นี่? มาเพิ่มความคิดเห็น:
myList.stream() // получить поток
    .filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
    .map(String::toUpperCase)  // преобразовать все значения, перевести в верхний регистр
    .sorted() // отсортировать по порядку (дефолтный порядо)
    .forEach(System.out::println); // вывести каждый элемент на экран
เปรียบเทียบกับวงปกติ:
List<String> toSort = new ArrayList<>();
for(String s : myList){
     if(s.startsWith("c")){
         toSort.add(s.toUpperCase());
     }
}

Collections.sort(toSort);

for(String s : toSort){
     System.ouy.println(s);
}
เมื่อคุณอ่านโค้ด ทุกอย่างดูน่ากลัว แต่การแสดงความคิดเห็นจะง่ายกว่าไหม? นี่เป็นเรื่องปกติ ฉันไม่เข้าใจพวกเขามานานแล้วเช่นกัน กุญแจสำคัญในการทำความเข้าใจคือการฝึกฝน ดังนั้นเราจึงเริ่มอ่านบทความของบุคคลที่สามและค้นหาคำตอบสำหรับคำถามของเรา คุณสามารถถามพวกเขาได้ที่นี่ในความคิดเห็น ฉันจะไม่ให้คำตอบทั้งหมด แต่ฉันจะชี้ไปในทิศทาง รายการงานจาก JavaRush ที่ฉันคิดว่าดีสำหรับการฝึกฝนการสตรีม:
  • 2208 - สามารถแก้ไขได้ด้วย 1 สตรีมและ 1 รีเทิร์น เช่น เนื้อความของเมธอดจะเริ่มต้นด้วยreturnแล้วจะมี 1 สตรีมทั้งหมด ละเว้น ข้อกำหนด กัน StringBuilderเถอะ

  • 1908 - คุณสามารถแก้ไขได้ด้วย 1 สตรีมและ 1 คืน เริ่มจากการอ่านไฟล์. ฉันไม่รู้วิธีบันทึกไฟล์ผ่านสตรีม (หากเป็นไปได้) ตอนนี้เราทำด้วยตนเอง เหล่านั้น. เราเปิดเพียง 2 สตรีม (คอนโซลและการเขียนลงไฟล์) เราอ่านไฟล์ผ่านวิธีการที่จะส่งคืนชีตหรือสตรีมให้เรา (google และ javadoc)

  • พ.ศ. 2450 (ค.ศ. 1907) - ตามทฤษฎีแล้ว สามารถแก้ไขได้ในกระแสเดียว อินพุตของสตรีมคือชื่อไฟล์ เอาต์พุตคือจำนวนคำ world

นั่นคือทั้งหมดที่ ถ้าทำได้ ฉันจะเขียนเรื่องง่ายๆ อีกเรื่องหนึ่ง ในความคิดของฉัน การอ่านเกี่ยวกับสิ่งเจ๋งๆ โดยไม่มีโอกาสได้ลองมันน่าเบื่อหรืออะไรสักอย่าง หลังจากใช้เครื่องคิดเลขและปริศนา 3 อันแล้ว ฉันคิดว่าคุณเข้ากันได้ดีกับแลมบ์ดาและลำธาร ดังนั้นโปรดอ่านความเป็นไปได้ทั้งหมดหากคุณยังไม่ได้อ่าน อัปเดต:
  • 1,016 - ในทางที่ผิดเล็กน้อยคุณสามารถแก้ไขได้ใน 1 สตรีมและ 1 คืน

  • 1821 - ง่ายมากใน 1 สตรีมและ 1 คืน

    ภารกิจ 2 นี้จะแนะนำให้คุณรู้จักกับวิธีการสตรีมแบบอื่นและตัวสะสมอื่น

  • 2468 - คุณสามารถบรรทัดคำในสตรีมเดียวแล้วเขียนลงในไฟล์ (ฉันไม่รู้ว่าเป็นไปได้หรือไม่ที่จะเขียนลงในไฟล์จากสตรีม)

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION