6.3 lambda 運算式,6.3lambda

來源:互聯網
上載者:User

6.3 lambda 運算式,6.3lambda

6.3.1 lambda 運算式是一個可傳遞的代碼塊,可以在以後執行一次或者多次。

       思考(如何按指定時間間隔完成工作,將這個工作放在一個ActionListener的actionPerformed方法中:)

class Worker implements ActionListener{    public void actionPerformed(ActionEvent event )    {      //do some work      }}

   想要反覆執行這個代碼,可以構造Worker類的一個執行個體,然後把這個執行個體提交到一個Timer對象。這裡的重點是actionPerformed方法包含希望以後執行的代碼。

    思考(如何用一個定製比較子完成排序。想要按長度而不是預設的字典順序對字串排序對字串排序,可以向sort方法傳入一個Comparator對象:)

class lengthComparator implements Comparator<String>{    public int compare(String first,String second)    {        return first.length()-second.length();    }}...Arrays.sort(strings,new lengthComparator());

共同點:都是將一個代碼塊傳遞到某個對象(一個是定時器,或者一個sort方法)。這個代碼快會在將來某個時間調用。

6.3.2 lambda運算式的文法

(String first,String second)
      ->first.length()-second.length()

          這是我看到的第一個lambda運算式,lambda運算式就是一個代碼塊,必須傳入代碼的變數規範。

        --------帶參數變數的運算式就被稱為Lambda運算式。

-------------------------運算式形式,參數,箭頭(->)以及一個運算式。如果代碼要完成的計算無法放在一個運算式中,就把這些代碼放在{}中,並包含顯示的return語句。如:

(String first,String second)->{     if(first.length()<second.length()) return -1;else if (first.length()>second.length())  return 1;else return 0;}

即使lambda運算式沒有參數,任然需要空括弧,就像無參數方法一樣:

( ->) {for(int i=100;i>=0;i--) System.out.println(i); }

 

如果可以推匯出lambda運算式的參數類型,則可以忽略其類型。如:

Comparator<String> comp        =(first,second)            ->first.length()>second.length();

 

如果方法只有一個參數,而且這個參數的類型可以推導得出,那麼還可以省略小括弧;

ActionListener listener =event->       System.out.println("The time is "+new Data()); 

 

無需指定lambda運算式的傳回型別。lambda運算式的傳回型別總是會由上下文推導得出。如:

(String first,String second)->first.length()-second.length()

上面的可以在需要int類型結果的上下文中使用。

下常式序顯示了如何在一個比較子和一個動作監聽器中使用lambda運算式。

 1 package cc.openhome; 2 import java.awt.Toolkit; 3 import java.util.Arrays; 4 import java.util.Date; 5 import javax.swing.JOptionPane; 6 import javax.swing.Timer; 7 public class LambdaTest { 8     public static void main(String[] args) { 9         // TODO code application logic here10         String[] planets =new String[] {"Yi","Er","San","Si","Wu","Liu","Qi","Ba"};11         System.out.println(Arrays.toString(planets));12         System.out.println("Sortd in dictionary order:");13         Arrays.sort(planets);14         System.out.println(Arrays.toString(planets));15         System.out.println("Sorted by length:");16         Arrays.sort(planets,(first,second) -> first.length()-second.length());17         System.out.println(Arrays.toString(planets));18         Timer t =new Timer (1000,event -> {System.out.println("The time is "+new Date());Toolkit.getDefaultToolkit().beep();});19         t.start();20          JOptionPane.showMessageDialog(null, "Quit programe?");21     }  22 }
[Yi, Er, San, Si, Wu, Liu, Qi, Ba]Sortd in dictionary order:[Ba, Er, Liu, Qi, San, Si, Wu, Yi]Sorted by length:[Ba, Er, Qi, Si, Wu, Yi, Liu, San]The time is Wed Mar 21 10:00:34 CST 2018The time is Wed Mar 21 10:00:35 CST 2018The time is Wed Mar 21 10:00:36 CST 2018The time is Wed Mar 21 10:00:37 CST 2018The time is Wed Mar 21 10:00:38 CST 2018The time is Wed Mar 21 10:00:39 CST 2018The time is Wed Mar 21 10:00:40 CST 2018The time is Wed Mar 21 10:00:41 CST 2018成功構建 (總時間: 8 秒)
run:

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.