แลมบ์ดา
หากคุณไม่รู้ว่าแลมบ์ดาคืออะไร: แลมบ์ดาจะมีหน้าตาดังนี้:(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
;- และทุกสิ่งทุกอย่างที่อยู่ในใจของคุณ
- เฉพาะแลมบ์ดาเท่านั้น ภารกิจอยู่ที่พวกมัน
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
-
1,016 - ในทางที่ผิดเล็กน้อยคุณสามารถแก้ไขได้ใน 1 สตรีมและ 1 คืน
-
1821 - ง่ายมากใน 1 สตรีมและ 1 คืน
ภารกิจ 2 นี้จะแนะนำให้คุณรู้จักกับวิธีการสตรีมแบบอื่นและตัวสะสมอื่น
-
2468 - คุณสามารถบรรทัดคำในสตรีมเดียวแล้วเขียนลงในไฟล์ (ฉันไม่รู้ว่าเป็นไปได้หรือไม่ที่จะเขียนลงในไฟล์จากสตรีม)
GO TO FULL VERSION