<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java Lambda:初學者指南 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/java-lambda-beginners-guide/](https://javabeginnerstutorial.com/core-java-tutorial/java-lambda-beginners-guide/) 本文介紹了 Java 8 中的 Java Lambda 表達式。[您可以在此處找到完整的代碼](https://github.com/JBTAdmin/java-tutorial/tree/master/lambda/src)。 ## Java Lambda 表達式 Java Lambda 表達式是 Java 的一個重要的新功能,已在 Java 8 中引入。Lambda 表達式是不屬于任何類的匿名函數(無名稱的函數),表示該函數沒有名稱,并且沒有類。 Lambda 表達式通過促進 Java 中的函數式編程大大簡化了開發。 它用于提供函數式接口的實現(函數式接口是僅包含一種方法的接口。例如,Java 標準的`Runnable`接口是函數式接口)。 它還有助于迭代,過濾和從集合庫中提取數據。 Lambda 表達式使您可以將代碼視為數據,將函數視為方法參數。 ### Lambda 表達式的語法 讓我們討論 Lambda 表達式的語法。 Lambda 表達式包含三個組件,一組參數,一個 Lambda 運算符和一個函數體。 這是三個組成部分 * **參數列表**:這里是參數,也可以為空或非空。 * **Lambda 表達式**: Lambda 表達式或箭頭(`->`)用于分隔參數列表和函數體。 * **函數正文**:它包含 Lambda 表達式的函數語句。 輸入參數在 lambda 運算符的左側,而函數體在 lambda 運算符的右側。 此 Lambda 表達式語法可減少將五行代碼合并為一行的代碼的龐大性。 參數列表`->`函數正文 ### Lambda 表達的特征 以下是 Lambda 表達的一些重要特征。 * **類型聲明**:類型聲明是可選的。 由您自己決定,如果您不聲明參數類型,則編譯器可以從參數值中進行猜測。 例如你可以寫 ```java (5,4) -> function body ``` * **參數周圍的括號**:參數周圍的括號也是可選的。 您可以根據需要放置括號,否則保留原樣。 如果 Lambda 表達式中有多個參數,則需要括號,如上面的示例所示。 對于一個參數,您可以編寫為 ```java 5 -> function body ``` * **花括號**:如果只有一條語句,圍繞函數主體的花括號也是可選的。 對于多個語句,需要在函數主體周圍使用花括號。 例如 ```java (5, 4) -> 5+4; ``` * **返回語句**:在 Lambda 表達式中,返回語句也是可選的。 如果主體具有單個表達式,則 Java 編譯器會自動返回值。 如果函數主體返回一個值,則應使用花括號將其括起來。 ### Lambda 表達的示例 以下是 Lambda 表達式的一些示例。 ```java (x, y) -> x+y; ``` 上面編寫的 Lambda 表達式表示給定兩個整數`x`,`y`,并返回另一個具有`x`和`y`之和的整數。 另一個 ```java ( ) -> 42 ``` 上面編寫的 Lambda 表達式表示未給出整數,并返回整數 42。 **前提條件** 要運行 Java Lambda 表達式,必須滿足以下條件。 * Java 開發套件(JDK8) * NetBeans 或 Eclipse ### 沒有參數的 Lambda 表達式 在此示例中,我將展示如何使用不帶參數的 Java Lambda 表達式。 打開您的 IDE(我將使用 Eclipse Neon)并開始創建一個新項目。 將其命名為`Lambda`。 創建一個名為`NoParameter`的類。 ```java public class NoParameter { public static void main(String[] args) { // TODO Auto-generated method stub // lambda expression with return type NoParameterInterface message = () -> { return "Hello World with No Parameter"; }; System.out.println( message.HelloWorld( )); } } @FunctionalInterface interface NoParameterInterface { //Here is a method with no parameter and return type as String public String HelloWorld(); } ``` 上面的示例通過使用不帶參數的 Lambda 表達式顯示了一個 Hello World 消息。 ### 單參數 Lambda 表達式 您已經看到了不帶參數的 Lambda 表達式示例。 我們來看一個帶有單個參數的 Lambda 表達式示例。 為此,創建一個名為`SingleParameter`的類,并將以下代碼粘貼在那里。 ```java public class SingleParameter { public static void main(String[] args) { // TODO Auto-generated method stub // lambda expression with single parameter num and returns square of num without any return statement SingleParameterInterface Square = (num) -> num*num; System.out.println(Square.SquareOfFive(5)); } } @FunctionalInterface interface SingleParameterInterface { //A method with single parameter and return type as int public int SquareOfFive(int s); } ``` 上面的示例顯示了帶有單個參數的 Lambda 表達式。 它以 5 作為輸入,并返回 5 的平方,而沒有任何`return`語句。 如上所述,如果只有一條語句,則無需指定`return`關鍵字。 編譯器會自動返回該值。 ### 多參數 Lambda 表達式 讓我們以包含多個參數的 Java Lambda 表達式為例。 創建一個新的 Java 類,并將其命名為`MulipleParamater`。 打開它,并在其中粘貼以下代碼。 ```java public class MulipleParamater { public static void main(String[] args) { // TODO Auto-generated method stub //lambda expression which add two number MulipleParamaterInterface add = (a, b) -> a + b; System.out.println("Sum of 5 and 4 is: "+add.sum(5, 4)); } } interface MulipleParamaterInterface { //here is a method with multiple parameter and int as return type public int sum(int a, int b); } ``` 上面的示例顯示了具有多個參數的 Lambda 表達式。 它以 5 和 4 作為輸入,并返回`sum`為 9。同樣,它無需指定`return`關鍵字即可工作。 ### 事件監聽器 讓我們探索一些更高級的示例,這些示例是 Java 中的事件監聽器。 Lambda 表達式如何用于實現事件監聽器。 您將看到帶有 Lambda 表達式和沒有 Lambda 表達式的事件監聽器的兩個示例。 **沒有 Lambda 表達式的事件監聽器** 首先,檢查沒有 Lambda 表達式的事件監聽器。 轉到 eclipse 并創建一個新類,將其命名為`eListener`。 打開它并粘貼以下代碼。 ```java import java.awt.event.*; //import for event listener import javax.swing.JButton; //import for JButton class import javax.swing.JFrame; //import for JFrame class import javax.swing.JTextField; //import for JTextField public class eListener { //event listener class without Lambda Expressions static JTextField textfield; static JButton button; static JFrame frame; public static void main(String[] args) { textfield=new JTextField(); button=new JButton("click"); frame=new JFrame("Event Listener without using Lambda Expression"); //set positions of text field and button textfield.setBounds(50, 50,150,20); button.setBounds(80,100,70,30); //action listener on button button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ textfield.setText("hello world"); } }); frame.add(textfield); frame.add(button); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(null); frame.setSize(300, 200); frame.setVisible(true); } } ``` 上面編寫的代碼顯示了 Java 中不使用 Lambda 表達式的事件監聽器的示例。 因此,您必須熟悉該代碼。 使用了簡單的`JButton``,JFrame`和`JTextField`。 當用戶單擊按鈕時,文本字段將顯示 Hello World 消息。 這是輸出 ![](https://img.kancloud.cn/0f/50/0f505bf61d3c04833eb4efa9c0de17c9_443x194.png) **具有 Lambda 表達式的事件監聽器** 現在使用 Lambda 表達式檢查事件監聽器。 轉到 eclipse 并創建一個名為`eListenerLambda`的新類。打開并粘貼以下代碼。 ```java import javax.swing.JButton; //import for JButton class import javax.swing.JFrame; //import for JFrame class import javax.swing.JTextField; //import for JTextField public class eListenerLambda { //event listener class without Lambda Expressions static JTextField textfield; static JButton button; static JFrame frame; public static void main(String[] args) { textfield=new JTextField(); button=new JButton("click"); frame=new JFrame("Event Listener without using Lambda Expression"); //set positions of text field and button textfield.setBounds(50, 50,150,20); button.setBounds(80,100,70,30); // lambda expression implementing here. button.addActionListener(e-> {textfield.setText("hello world");}); frame.add(textfield); frame.add(button); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(null); frame.setSize(300, 200); frame.setVisible(true); } } ``` 上面編寫的代碼顯示了帶有 Lambda 表達式的 Java 事件監聽器的示例。 如果我們將這兩個代碼進行比較,您將檢查第一個示例中的動作監聽器代碼是否包含三個語句,而使用 Lambda 表達式可以在一個語句中解決問題。 這兩個代碼的輸出與上面顯示的相同。 ### 使用 Lambda 表達式的比較器示例 讓我們再看看使用 Lambda 表達式作為比較器示例的另一段代碼。 創建一個新類,并將其命名為`Comparatorlambda.java`。 打開它并粘貼以下代碼。 ```java import java.util.ArrayList; import java.util.Collections; import java.util.List; //account class holds the details of a bank account of customers like account number, name and account balance class Account{ int accountNumber; String name; float AccountBalance; public Account(int accountNumber, String name, float AccountBalance) { super(); this.accountNumber = accountNumber; this.name = name; this.AccountBalance = AccountBalance; } } //comparator class using Lambda Expressions public class Comparatorlambda{ public static void main(String[] args) { List<Account> list=new ArrayList<Account>(); //Adding account details in list list.add(new Account(00235,"Harry",25000)); list.add(new Account(11687,"Donald",30088)); list.add(new Account(27865,"Caristano",15078)); System.out.println("Sorting on the basis of account name..."); // implementing lambda expression Collections.sort(list,(p1,p2)->{ return p1.name.compareTo(p2.name); }); System.out.println("Account Number: Account Name: Account Balance:"); for(Account p:list){ System.out.println(p.accountNumber+" \t\t"+p.name+" \t\t"+p.AccountBalance); } } } ``` 此示例具有一個帳戶類,其中包含名稱,號碼和帳戶余額之類的帳戶信息。 Lambda 表達式用于根據帳戶名稱對帳戶進行比較和排序。 這是用于此目的的 Lambda 表達式。 ```java Collections.sort(list,(p1,p2)->{return p1.name.compareTo(p2.name); }); ``` 以下是此代碼的輸出 ![](https://img.kancloud.cn/ca/87/ca871bd09be46013281b09849a0ec3a2_527x207.png) ## 總結 Lambda 表達式用于定義函數式接口的內聯實現。 您在上面的示例中看到,Lambda 表達式節省了我們的時間,并大大減少了代碼語句。 它通過促進函數式編程為 Java 提供了強大的功能。 Java 的這一新功能改變了完整的編碼方式,簡化了開發過程,因為它利用了多核環境的并行功能。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看