1. 程式人生 > >Java lambda寫法簡單實現

Java lambda寫法簡單實現

       眾所周知,java8支援lambda表示式,常見的一些操作都可以通過lambda來實現,比如遍歷List,或者是實現某個事件介面,還有我們熟悉的Swing的事件,如下案例所示:

// Java 8之前:
JButton b1=  new JButton("BeforeJava8");
b.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    System.out.println("Button push");
    }
});

// Java 8方式:
JButton b2=  new JButton("Java8");
b2.addActionListener((e) -> {
    System.out.println("Button push");
});

       有時候我們比較迷惑:Java明明是OOP語言,Lambda表示式豈不是破壞了OOP的封裝特性?實則不然,Lambda其實是用介面實現的,而這個介面只有一個方法。我們看下面的案例:

/**
 * @author wangwenhai
 */
interface PrintHandler {
    void print(int[] array);
}


public class Main {
    static void print(int[] array, PrintHandler printHandler) {
        printHandler.print(array);
    }

    public static void main(String[] args) {
        int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        print(array, new PrintHandler() {
            @Override
            public void print(int[] array) {
                for (int i = 0; i < array.length; i++) {
                    System.out.println("陣列:" + i);
                }
            }
        });
    }
}

這是一個簡單的遍歷陣列的寫法,通過傳一個介面進去,然後使用者去實現具體的遍歷方法,上面看上去是一個很普通的匿名介面實現,但是如果我們用了Java8以後,這段程式碼會變得更加精簡:

/**
 * @author wangwenhai
 */
interface PrintHandler {
    void print(int[] array);
}


public class Main {
    private static void print(int[] array, PrintHandler printHandler) {
        printHandler.print(array);
    }

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        print(array, array1 -> {
            for (int i = 0; i < array1.length; i++) {
                System.out.println("陣列:" + i);
            }
        });
    }
}

      大家也許已經注意到了,此處的匿名介面實現不見了,彷彿出現了一段從沒見過的程式碼,其實這就是Java8的lambda的實現:

        print(array, array1 -> {
            for (int i = 0; i < array1.length; i++) {
                System.out.println("陣列:" + i);
            }
        });

        其中array1是傳給介面的引數,在這裡直接省略了介面的實現過程,因為就一個方法,所以這個引數直接被傳進print方法裡面。

        我們用個圖來表示從OOP到FP(函數語言程式設計)的過程。

相關推薦

Java lambda寫法簡單實現

       眾所周知,java8支援lambda表示式,常見的一些操作都可以通過lamb

Java棧的簡單實現

元素 mys next() str stat 頭指針 出棧 push [] * 數據結構與算法Java實現 棧 * * @author 小明 * */ public class MyStack { private Node top;// 頭指針

Java 單鏈表簡單實現

pre println ret 返回 .data del span 鏈表 font 實現功能並不完全,只有添加,刪除,和遍歷功能,後續還會繼續添加 定義節點屬性 class Node{ //定義節點屬性 public int Data; public No

JAVA——黑白棋簡單實現

package Reversi_JCoder; import java.awt.*; import java.awt.Button; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.

Java反射的簡單實現

一.Java的反射機制概述與場景     JAVA反射機制是在執行狀態中,對於任意一個類(class檔案),都能夠知道這個類的所有屬性和方法; 對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;  這種動態互毆的資訊以及動態呼叫物件的方法的功能稱

三維裝箱問題Java程式碼的簡單實現過程(程式碼)

  兩年前發了篇關於三維裝箱的日記,許諾過要分享程式碼的,結果一直沒發,後來居然忘記了。一直有人加我QQ來的,這幾年都用微信了,直到最近才發現這個問題,   千萬不要輕易許諾別人什麼,否則事後真的很難兌現,兩年前的欠下的程式碼,今天,還了罷。為了我寫了好久的,腦力不夠了,空

JAVA Queue的簡單實現

佇列是資料結構中比較重要的一種型別,他支援先進先出,跟生活中的排隊一樣,這一點剛好和Stack(棧)相反。 Android中最熟悉的莫過於MessageQueue了,諾!就像下圖這張圖一樣,從前面拿出來後面塞進去,android中有一個死迴圈在不停地搞這個事。 那麼jav

Java Web中簡單實現自動登陸功能。

Java 對自動登陸功能的簡單實現,僅用到了servlet和一個filter。第一次寫博文,如有不足的地方,敬請指正,謝謝。 登陸介面 <%@ page language="java" import="java.util.*" pageEncoding="UTF

RecyclerView基礎寫法簡單實現

一、新增依賴dependencies { compile 'com.android.support:recyclerview-v7:23.1.1' }點選右上角Sync Now,此時如果不報紅,直接跳過下面步驟,可以開始編寫RecyclerView控制元件了。但,

Java迴圈佇列簡單實現

public class Queue { private int MAX_CAPACITY; private int[] data; private int front; private int rear; privat

Java MemCached Window簡單實現

1、下載下面附件 memcached-1.2.1-win32.zip 和 memcached-release_1.6.zip 。解壓到指定目錄,cmd切換進解壓後的 memcached-1.2.1-win32 目錄,執行 memcached.exe -d install 和 memcached.exe -l

Java傳送郵件簡單實現以及問題的解決

利用Java傳送郵件的過程主要有一下步驟: 建立Session物件,配置屬性利用Session建立Message物件,然後設定發件人、收件人、郵件主題和正文利用Transport物件傳送郵件 需要的jar有2個:activation.jar和mail.jar 程式碼如下

Java陣列的簡單實現

Java將陣列封裝為類的簡單實現 public class Array { private long[] array; private int length = 0; //構造 public Array(int size) {

安卓(java)計算器簡單實現

博主q q 656358805 歡迎線上交流! 以下兩圖是計算器的結果展示:                                                                  好了,那麼今天我們來講一下安卓計算器的簡單實現,對於廣大愁於

Java 網路程式設計簡單實現

java 網路程式設計學習筆記 1. 獲取終端資訊 在獲取莫終端資訊時,需要使用InetAddress類的相應方法進行獲取 1.1 獲取本機的網路相關資訊 獲取本機的網路相關資訊時需要使用命令InetAddress.getLocalHost()

Javascript Lambda簡單實現

由來 今早面試看到一題是說使用js實現.net中的where功能,當時腦子裡一片空白,只能回來腦補下(本來想將部落格放到github及Blogger上,但限於配置麻煩,暫且放這裡)。 真心不知道ES6以下的js支不支援 " => ", 後來在

JPush簡單Java服務端案例實現

服務端 開發者 comm platform die spa message else 獲取數據 一、激光推送準備工作 1、註冊極光推送開發者賬號,創建應用: 2、完成推送設置,填寫應用名提交生成安裝包: 3、掃碼安裝簡單的測試apk,查看應用信息會有AppKey和Mas

對稱加密詳解,以及JAVA簡單實現

turn bsp 十進制 stat mage 需要 對稱密鑰 else ges (原) 常用的加密有3種 1、正向加密,如MD5,加密後密文固定,目前還沒辦法破解,但是可以能過數據庫撞庫有一定概率找到,不過現在一般用這種方式加密都會加上鹽值。 2、對稱加密,通過一個固定

Java web文件服務器的簡單實現

是否 auth cor multi 同步 登錄驗證 stp while break 我們公司在做一個在線考試平臺,平臺在發布文章、編輯試題時需要將文章生成的html文檔以及題中的圖片上傳到一個專門文件服務器,然後再界面中使用http鏈接上傳的文件。 基於這個考慮,需要實現一

java倒計時三種簡單實現方式

idt 使用 instance too rgs 設置 private block ace 寫完js倒計時,突然想用java實現倒計時,寫了三種實現方式 一:設置時長的倒計時; 二:設置時間戳的倒計時; 三:使用java.util.Timer類實現的時間戳倒計時 代碼如下: