บทช่วยสอนJava

Java HOME Java Intro Java เริ่มต้น Java Syntax ความคิดเห็นของ Java ตัวแปร Java Java Data Types การหล่อแบบจาวา ตัวดำเนินการ Java Java Strings Java Math Java Booleans Java If...Else Java Switch Java ในขณะที่ลูป Java สำหรับลูป Java Break/ต่อ Java Arrays

เมธอดของจาวา

เมธอดของจาวา พารามิเตอร์เมธอด Java วิธี Java โอเวอร์โหลด ขอบเขต Java Java Recursion

คลาส Java

Java OOP Java Classes/Objects คุณสมบัติคลาส Java วิธีการคลาส Java Java Constructors Java Modifiers การห่อหุ้มด้วยจาวา แพ็คเกจ Java / API มรดกจาวา Java Polymorphism Java Inner Classes Java Abstraction อินเทอร์เฟซ Java Java Enums อินพุตผู้ใช้ Java Java วันที่ Java ArrayList Java LinkedList Java HashMap Java HashSet Java Iterator คลาส Java Wrapper ข้อยกเว้น Java Java RegEx Java Threads จาวา แลมบ์ดา

การจัดการไฟล์ Java

ไฟล์ Java Java สร้าง/เขียนไฟล์ Java อ่านไฟล์ Java ลบไฟล์

Java ฮาวทู

เพิ่มสองตัวเลข

Java Reference

คีย์เวิร์ด Java เมธอด Java String Java Math Methods

ตัวอย่าง Java

ตัวอย่าง Java Java Compiler แบบฝึกหัด Java Java Quiz ใบรับรอง Java


Java Lambda Expressions


Java Lambda Expressions

เพิ่ม Lambda Expressions ใน Java 8

นิพจน์แลมบ์ดาคือโค้ดสั้นๆ ที่รับพารามิเตอร์และส่งกลับค่า นิพจน์แลมบ์ดามีความคล้ายคลึงกับเมธอด แต่ไม่ต้องการชื่อ และสามารถนำไปใช้ในเนื้อหาของเมธอดได้


ไวยากรณ์

นิพจน์แลมบ์ดาที่ง่ายที่สุดมีพารามิเตอร์เดียวและนิพจน์:

parameter -> expression

หากต้องการใช้มากกว่าหนึ่งพารามิเตอร์ ให้ใส่วงเล็บ:

(parameter1, parameter2) -> expression

นิพจน์มีจำกัด พวกเขาต้องคืนค่าทันที และ ต้องไม่มีตัวแปร การมอบหมาย หรือคำสั่ง เช่นifหรือ forเพื่อดำเนินการที่ซับซ้อนมากขึ้น สามารถใช้บล็อกโค้ดกับวงเล็บปีกกาได้ หากนิพจน์แลมบ์ดาจำเป็นต้องคืนค่า บล็อกโค้ดควรมีreturnคำสั่ง

(parameter1, parameter2) -> { code block }

การใช้นิพจน์แลมบ์ดา

นิพจน์แลมบ์ดามักจะส่งผ่านเป็นพารามิเตอร์ไปยังฟังก์ชัน:

ตัวอย่าง

ใช้นิพจน์ lamba ในวิธีArrayList's forEach()เพื่อพิมพ์ทุกรายการในรายการ:

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    numbers.forEach( (n) -> { System.out.println(n); } );
  }
}

นิพจน์แลมบ์ดาสามารถเก็บไว้ในตัวแปรได้หากชนิดของตัวแปรเป็นอินเทอร์เฟซที่มีวิธีเดียวเท่านั้น นิพจน์แลมบ์ดาควรมีจำนวนพารามิเตอร์เท่ากันและมีประเภทส่งคืนเหมือนกับเมธอดนั้น Java มีอินเทอร์เฟซหลายประเภทในตัว เช่นConsumerอินเทอร์เฟซ (พบในjava.utilแพ็คเกจ) ที่ใช้โดยรายการ

ตัวอย่าง

ใช้อินเทอร์เฟซของ Java Consumerเพื่อเก็บนิพจน์แลมบ์ดาในตัวแปร:

import java.util.ArrayList;
import java.util.function.Consumer;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    Consumer<Integer> method = (n) -> { System.out.println(n); };
    numbers.forEach( method );
  }
}

ในการใช้นิพจน์แลมบ์ดาในเมธอด เมธอดควรมีพารามิเตอร์ที่มีอินเตอร์เฟสเมธอดเดียวเป็นประเภท การเรียกใช้เมธอดของอินเทอร์เฟซจะเรียกใช้นิพจน์แลมบ์ดา:

ตัวอย่าง

สร้างวิธีการที่ใช้นิพจน์แลมบ์ดาเป็นพารามิเตอร์:

interface StringFunction {
  String run(String str);
}

public class Main {
  public static void main(String[] args) {
    StringFunction exclaim = (s) -> s + "!";
    StringFunction ask = (s) -> s + "?";
    printFormatted("Hello", exclaim);
    printFormatted("Hello", ask);
  }
  public static void printFormatted(String str, StringFunction format) {
    String result = format.run(str);
    System.out.println(result);
  }
}