Trong bài viết này, chúng ta sẽ tìm hiểu về biểu thức lambda trong Java và cách sử dụng biểu thức lambda với các giao diện chức năng, giao diện chức năng chung và API luồng với sự trợ giúp của các ví dụ.

Bạn đang xem : Ví dụ về hàm lambda của java

Biểu thức lambda được giới thiệu lần đầu tiên trong Java 8. Mục tiêu chính của nó là tăng sức mạnh biểu đạt của ngôn ngữ. < / p>

Tuy nhiên, trước khi tham gia lambdas, trước tiên chúng ta cần hiểu các giao diện chức năng.

Giao diện chức năng là gì?

Nếu một giao diện Java chứa một và chỉ một phương thức trừu tượng thì nó được gọi là giao diện chức năng. Chỉ một phương pháp này xác định mục đích dự kiến ​​của giao diện.

Ví dụ: giao diện Runnable từ gói java.lang ; là một giao diện chức năng vì nó chỉ cấu thành một phương thức, tức là run () .

Ví dụ 1: Xác định Giao diện Chức năng trong java

 nhập java.lang.F FunctionInterface;
@F FunctionInterface
giao diện công cộng MyInterface {
    // phương thức trừu tượng duy nhất
    double getValue ();
}  

Trong ví dụ trên, giao diện MyInterface chỉ có một phương thức trừu tượng getValue (). Do đó, nó là một giao diện chức năng.

Ở đây, chúng tôi đã sử dụng chú thích @F FunctionInterface . Chú thích buộc trình biên dịch Java chỉ ra rằng giao diện là một giao diện chức năng. Do đó, không cho phép có nhiều hơn một phương thức trừu tượng. Tuy nhiên, nó không phải là bắt buộc.

Trong Java 7, các giao diện chức năng được coi là loại Phương pháp Tóm tắt Đơn hoặc loại SAM . SAM thường được triển khai với Lớp ẩn danh trong Java 7.

Ví dụ 2: Triển khai SAM với các lớp ẩn danh trong java

 public class FunctionInterfaceTest {
    public static void main (String [] args) {

        // lớp ẩn danh
        Chủ đề mới (new Runnable () {
            @Ghi đè
            public void run () {
                System.out.println ("Tôi vừa triển khai Giao diện Chức năng Runnable.");
            }
        }).bắt đầu();
    }
}  

Đầu ra :

Tôi vừa triển khai Giao diện chức năng Runnable. 

Tại đây, chúng ta có thể chuyển một lớp ẩn danh cho một phương thức. Điều này giúp viết các chương trình với ít mã hơn trong Java 7. Tuy nhiên, cú pháp vẫn còn khó và cần nhiều dòng mã bổ sung.

Java 8 đã mở rộng sức mạnh của SAMs bằng cách tiến thêm một bước nữa. Vì chúng ta biết rằng một giao diện chức năng chỉ có một phương thức, nên không cần xác định tên của phương thức đó khi chuyển nó như một đối số. Biểu thức Lambda cho phép chúng tôi thực hiện chính xác điều đó.

Giới thiệu về biểu thức lambda

Về cơ bản, biểu thức Lambda là một phương thức ẩn danh hoặc không được đặt tên. Biểu thức lambda không tự thực thi. Thay vào đó, nó được sử dụng để triển khai một phương pháp được xác định bởi một giao diện chức năng.

Làm cách nào để xác định biểu thức lambda trong Java?

Đây là cách chúng tôi có thể xác định biểu thức lambda trong Java.

 (danh sách tham số) - & gt; lambda body  

Toán tử mới ( - & gt; ) được sử dụng được gọi là toán tử mũi tên hoặc toán tử lambda. Cú pháp có thể không rõ ràng vào lúc này. Hãy cùng khám phá một số ví dụ,

Giả sử, chúng ta có một phương thức như sau:

 double getPiValue () {
    trả về 3,1415;
}  

Chúng ta có thể viết phương thức này bằng cách sử dụng biểu thức lambda dưới dạng:

 () - & gt; 3,1415  

Ở đây, phương thức không có bất kỳ tham số nào. Do đó, phía bên trái của toán tử bao gồm một tham số trống. Phía bên phải là phần thân lambda chỉ định hành động của biểu thức lambda. Trong trường hợp này, nó trả về giá trị 3,1415.

Các loại Lambda Body

Trong Java, phần thân lambda có hai loại.

1. Phần thân có một biểu thức duy nhất

 () - & gt; System.out.println ("Lambdas thật tuyệt");  

Loại phần thân lambda này được gọi là phần thân biểu thức.

2. Nội dung bao gồm một khối mã.

 () - & gt; {
    đôi số pi = 3,1415;
    trả về số pi;
};  

Loại phần thân lambda này được gọi là phần thân khối. Phần thân khối cho phép phần thân lambda bao gồm nhiều câu lệnh. Những câu lệnh này được đặt bên trong dấu ngoặc và bạn phải thêm dấu chấm phẩy sau dấu ngoặc.

Xem Thêm  Cách căn giữa mọi thứ bằng CSS - Căn chỉnh Div, Text, v.v. - css center một phần tử

Lưu ý : Đối với phần thân khối, bạn có thể có câu lệnh trả về nếu phần nội dung trả về một giá trị. Tuy nhiên, phần nội dung biểu thức không yêu cầu câu lệnh trả về.

Ví dụ 3: Biểu thức Lambda

Hãy viết một chương trình Java trả về giá trị của Pi bằng cách sử dụng biểu thức lambda.

Như đã đề cập trước đó, một biểu thức lambda không được thực thi riêng. Thay vào đó, nó hình thành việc triển khai phương thức trừu tượng được xác định bởi giao diện chức năng.

Vì vậy, trước tiên chúng ta cần xác định một giao diện chức năng.

 nhập java.lang.F FunctionInterface;

// đây là giao diện chức năng
@F FunctionInterface
giao diện MyInterface {

    // phương thức trừu tượng
    double getPiValue ();
}

lớp công khai Chính {

    public static void main (String [] args) {

    // khai báo một tham chiếu đến MyInterface
    MyInterface ref;
    
    // biểu thức lambda
    ref = () - & gt; 3,1415;
    
    System.out.println ("Giá trị của Pi =" + ref.getPiValue ());
    }
}  

Đầu ra :

Giá trị của Pi = 3,1415 

Trong ví dụ trên,

  • Chúng tôi đã tạo một giao diện chức năng có tên MyInterface. Nó chứa một phương thức trừu tượng duy nhất có tên getPiValue ()
  • Bên trong lớp Chính, chúng tôi đã khai báo một tham chiếu đến MyInterface. Lưu ý rằng chúng ta có thể khai báo một tham chiếu của một giao diện nhưng chúng ta không thể khởi tạo một giao diện. Đó là,
     // nó sẽ báo lỗi
    MyInterface ref = new myInterface ();
    
    // Nó hợp lệ
    MyInterface ref;  
  • Sau đó, chúng tôi đã gán một biểu thức lambda cho tham chiếu.
     ref = () - & gt; 3,1415;  
  • Cuối cùng, chúng tôi gọi phương thức getPiValue () bằng giao diện tham chiếu. Khi nào
     System.out.println ("Giá trị của Pi =" + ref.getPiValue ());  

Biểu thức Lambda có tham số

Cho đến bây giờ, chúng tôi đã tạo biểu thức lambda mà không có bất kỳ tham số nào. Tuy nhiên, tương tự như các phương thức, biểu thức lambda cũng có thể có các tham số. Ví dụ:

 (n) - & gt; (n% 2) == 0  

Ở đây, biến n bên trong dấu ngoặc đơn là một tham số được truyền cho biểu thức lambda. Phần thân lambda nhận tham số và kiểm tra xem nó là chẵn hay lẻ.

Ví dụ 4: Sử dụng biểu thức lambda với các tham số

 @F FunctionInterface
giao diện MyInterface {

    // phương thức trừu tượng
    Đảo ngược chuỗi (String n);
}

lớp công khai Chính {

    public static void main (String [] args) {

        // khai báo một tham chiếu đến MyInterface
        // gán một biểu thức lambda cho tham chiếu
        MyInterface ref = (str) - & gt; {

            Kết quả chuỗi = "";
            for (int i = str.length () - 1; i & gt; = 0; i--)
            kết quả + = str.charAt (i);
            trả về kết quả;
        };

        // gọi phương thức của giao diện
        System.out.println ("Lambda reverse =" + ref.reverse ("Lambda"));
    }

}  

Đầu ra :

Lambda đã đảo ngược = adbmaL 

Giao diện Chức năng Chung

Cho đến nay, chúng tôi đã sử dụng giao diện chức năng chỉ chấp nhận một loại giá trị. Ví dụ:

 @F FunctionInterface
giao diện MyInterface {
    Chuỗi đảo ngược (String n);
}  

Giao diện chức năng trên chỉ chấp nhận String và trả về String . Tuy nhiên, chúng ta có thể làm cho giao diện chức năng chung chung để mọi kiểu dữ liệu được chấp nhận. Nếu bạn không chắc chắn về các phần tử chung, hãy truy cập Java Generics .

Ví dụ 5: Giao diện chức năng chung và biểu thức Lambda

 // GenericInterface.java
@F FunctionInterface
giao diện GenericInterface & lt; T & gt; {

    // phương thức chung
    T func (T t);
}

// GenericLambda.java
lớp công khai Chính {

    public static void main (String [] args) {

        // khai báo một tham chiếu đến GenericInterface
        // GenericInterface hoạt động trên dữ liệu Chuỗi
        // gán một biểu thức lambda cho nó
        GenericInterface & lt; String & gt; đảo ngược = (str) - & gt; {

            Kết quả chuỗi = "";
            for (int i = str.length () - 1; i & gt; = 0; i--)
            kết quả + = str.charAt (i);
            trả về kết quả;
        };

        System.out.println ("Lambda reverse =" + reverse.func ("Lambda"));

        // khai báo một tham chiếu khác tới GenericInterface
        // GenericInterface hoạt động trên dữ liệu Số nguyên
        // gán một biểu thức lambda cho nó
        GenericInterface & lt; Integer & gt; giai thừa = (n) - & gt; {

            int result = 1;
            cho (int i = 1; i & lt; = n; i ++)
            result = i * kết quả;
            trả về kết quả;
        };

        System.out.println ("giai thừa của 5 =" + factorial.func (5));
    }
}  

Đầu ra :

Lambda đã đảo ngược = adbmaL
giai thừa của 5 = 120 

Trong ví dụ trên, chúng tôi đã tạo một giao diện chức năng chung có tên là GenericInterface. Nó chứa một phương thức chung có tên là func ().

Đây, bên trong lớp Chính,

  • GenericInterface & lt; String & gt; ngược lại – tạo một tham chiếu đến giao diện. Giờ đây, giao diện hoạt động trên loại dữ liệu String .
  • GenericInterface & lt; Integer & gt; giai thừa – tạo một tham chiếu đến giao diện. Trong trường hợp này, giao diện hoạt động dựa trên loại dữ liệu Integer .

Lambda Expression and Stream API

Gói java.util.stream mới đã được thêm vào JDK8, cho phép các nhà phát triển java thực hiện các thao tác như tìm kiếm, lọc, ánh xạ, thu nhỏ hoặc thao tác các bộ sưu tập như Danh sách .

Ví dụ: chúng tôi có một luồng dữ liệu (trong trường hợp của chúng tôi là Danh sách của Chuỗi ) trong đó mỗi chuỗi là sự kết hợp của tên quốc gia và địa danh của quốc gia. Giờ đây, chúng tôi có thể xử lý luồng dữ liệu này và chỉ truy xuất các địa điểm từ Nepal.

Đối với điều này, chúng tôi có thể thực hiện các hoạt động hàng loạt trong luồng bằng cách kết hợp API luồng và biểu thức Lambda.

Ví dụ 6: Trình diễn việc sử dụng lambdas với API luồng

 nhập java.util.ArrayList;
nhập java.util.List;

lớp công khai StreamMain {

    // tạo một đối tượng của danh sách bằng ArrayList
    Danh sách tĩnh & lt; Chuỗi & gt; place = new ArrayList & lt; & gt; ();

    // chuẩn bị dữ liệu của chúng tôi
    public static List getPords () {

        // thêm địa điểm và quốc gia vào danh sách
        place.add ("Nepal, Kathmandu");
        place.add ("Nepal, Pokhara");
        place.add ("Ấn Độ, Delhi");
        place.add ("Hoa Kỳ, New York");
        place.add ("Châu Phi, Nigeria");

        trả lại địa điểm;
    }

    public static void main (String [] args) {

        Danh sách & lt; Chuỗi & gt; myPords = getPists ();
        System.out.println ("Địa điểm từ Nepal:");
        
        // Lọc các địa điểm từ Nepal
        myPists.stream ()
                .filter ((p) - & gt; p.startsWith ("Nepal"))
                .map ((p) - & gt; p.toUpperCase ())
                .sorted ()
                .forEach ((p) - & gt; System.out.println (p));
    }

}  

Đầu ra :

Địa điểm từ Nepal:
NEPAL, KATHMANDU
NEPAL, POKHARA 

Trong ví dụ trên, hãy lưu ý câu lệnh,

 myPists.stream ()
        .filter ((p) - & gt; p.startsWith ("Nepal"))
        .map ((p) - & gt; p.toUpperCase ())
        .sorted ()
        .forEach ((p) - & gt; System.out.println (p));  

Ở đây, chúng tôi đang sử dụng các phương thức như filter () , map () forEach () của Stream API. Các phương thức này có thể lấy biểu thức lambda làm đầu vào.

Chúng tôi cũng có thể xác định các biểu thức của riêng mình dựa trên cú pháp mà chúng tôi đã học ở trên. Điều này cho phép chúng tôi giảm bớt các dòng mã một cách đáng kể như chúng ta đã thấy trong ví dụ trên.


Xem thêm những thông tin liên quan đến chủ đề ví dụ về hàm lambda của java

Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Training | Edureka

  • Tác giả: edureka!
  • Ngày đăng: 2018-11-29
  • Đánh giá: 4 ⭐ ( 1461 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: **** Java Certification Training: https://www.edureka.co/java-j2ee-training-course ****
    This Edureka tutorial on “Lambda Expressions in Java” will introduce you to a new Java feature called Lambda Expressions. It will also talk about the functional interface in Java. Through this tutorial you will learn the following topics:
    [1:11] Java Lambda Expressions
    [2:26] Functional Interface
    [8:46] Lambda Parameters
    [11:55] Lambda as an Object
    [12:29] Lambda Value Capture
    [15:01] Method References as lambdas

    Check out our Java Tutorial blog series: https://goo.gl/osrGrS

    Check out our complete Youtube playlist here: https://goo.gl/gMFLx3

    -------------------------------------

    Do subscribe to our channel and hit the bell icon to never miss an update from us in the future: https://goo.gl/6ohpTV

    Instagram: https://www.instagram.com/edureka_learning/
    Facebook: https://www.facebook.com/edurekaIN/
    Twitter: https://twitter.com/edurekain
    LinkedIn: https://www.linkedin.com/company/edureka

    Java Javalambda JavaLambdaTutorial LearnJava JavaOnlineTraining JavaProgramming

    -------------------------------------

    How it Works?

    1. This is a 7 Week Instructor-led Online Course, 45 hours of assignment and 20 hours of project work

    2. We have a 24x7 One-on-One LIVE Technical Support to help you with any problems you might face or any clarifications you may require during the course.

    3. At the end of the training, you will be working on a real-time project for which we will provide you a Grade and a Verifiable Certificate!

    -------------------------------------

    About the Course

    Edureka's Advanced Java J2EE and SOA training and certification course is designed for students and professionals who want to be a Java Developer. This is a 42-hour course which will cover both core and advanced Java concepts like Database connectivity, Threads, Exception Handling, Collections, JSP, Servlets, XML Handling etc. We will also learn various Java frameworks like Hibernate and Spring. During our Java/ Certification training, our instructors will help you:

    1. Develop the code with various Java data types, conditions, and loops.
    2. Implement arrays, functions and string handling techniques.
    3. Understand object-oriented programming through Java using Classes, Objects and various Java concepts like Abstract, Final etc.
    4. Implement multi-threading and exception handling.
    5. Use parse XML files using DOM and SAX in Java.
    6. Write a code in JDBC to communicate with the Database.
    7. Develop web applications and JSP pages.
    8. Interact with the database using hibernate framework.
    9. Write code with spring framework components like Dependency Injection and Auto Wiring.
    10. Implement SOA using web services.

    -------------------------------------

    Who should go for this course?

    This course is designed for professionals aspiring to become Java Developers. Programmers, Web Developers, Web Designers, Programming Hobbyists, Database Administrators, Youngsters who want to kick-start their career are the key beneficiaries of this course.

    -------------------------------------

    Why learn Java?

    Java is a general-purpose, class-based, object-oriented computer programming language that was designed by James Gosling at Sun Microsystems in 1995.

    Key Highlights of Java:
    Platform Independent: This allows programmers to develop applications that can run on any operating system.

    Usability of Java: Java is the most widely used programming language. It is present everywhere. It really doesn't matter which domain you are working in, you will surely come across Java sooner or later!

    Open Source: The good news is that Java is available for free! All the development tools and the environment (JRE & JDK) that is used to develop Java applications are absolutely free of cost.

    Android: Irrespective of the fact that you are tech savvy or not, most of us are badly bitten by the Android bug! Android is in great demand today and fortunately, you need Java for Android development. Hence, the importance of Java has increased even more.

    Hadoop: Hadoop is one of the most trending frameworks for processing Big Data. It has been designed and developed in Java.

    In spite of having a tough competition on the server side from Microsoft and other companies, Java is doing extremely well on mobile platforms, thanks to Android! It has also been the primary language for Hadoop Developers.

    -------------------------------------

    Got a question on the topic?
    Please share it in the comment section below and our experts will answer it for you.

    For Java Training and Certification, please write back to us at sales@edureka.co or call us at IND: 9606058406 / US: 18338555775 (toll free).

Biểu thức Lambda trong java 8

  • Tác giả: hocjava.com
  • Đánh giá: 5 ⭐ ( 2333 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lambda Expression - Biểu thức Lambda trong java là một tính năng mới và quan trọng được thêm vào trong Java SE 8.

Giới thiệu Lambda Expression trong Java 8

  • Tác giả: viblo.asia
  • Đánh giá: 4 ⭐ ( 4726 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 1. Lambda Expression là gì? Lamda Expression là một hàm không có tên (unamed function) với các tham số (parameters) và nội dung thực thi (body). Nội dung thực thi của Lamda expression có thể là 1 khối...

40+ bài học Python cơ bản

  • Tác giả: nguyenvanhieu.vn
  • Đánh giá: 4 ⭐ ( 9528 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chuyên mục của bài viết hôm nay tìm hiểu về hàm Lambda trong Python. Chúng tôi sẽ trình bày cú pháp cơ bản của hàm Lambda và đi qua một số ví dụ để làm quen

Biểu thức Java Lambda (Có ví dụ)

  • Tác giả: vi.wiki-base.com
  • Đánh giá: 5 ⭐ ( 2797 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Giới thiệu về Stream API trong Java 8

  • Tác giả: gpcoder.com
  • Đánh giá: 4 ⭐ ( 5332 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Stream (luồng) là một đối tượng mới của Java được giới thiệu từ phiên bản Java 8, giúp cho việc thao tác trên collection và array trở nên dễ dàng và tối ưu hơn.

Lambda Expressions trong Java 8

  • Tác giả: freetuts.net
  • Đánh giá: 5 ⭐ ( 9614 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài này chúng ta sẽ tìm hiểu về Lambda Expressions trong Java 8, đây là tính năng được thêm vào kể từ phiên bản Java SE 8 nên rất mới.

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php