【Java】jdk 1.8 新特性——Lambda表達式

Lambda表達式

jdk 1.8 新加入的特性,簡化了簡單接口的實現

函數式接口

函數式中只有一個待實現的方法,可以使用@FunctionalInterface注解標注函數式接口.這個接口中只能有一個待實現的方法,但可以包含默認方法,靜態方法以及Object類中的public方法

package Note.lambda_demo;@FunctionalInterface
public interface Demo01 {void test();default void defMethod() {System.out.println("default function");}static void staticMethod() {System.out.println("static function");}@Overrideboolean equals(Object object);
}

Lambda表達式的使用

在1.8之前,如果想要使用這樣的接口,通常可以使用匿名內部類實現,

Demo01 demo01 = new Demo01() {@Overridepublic void test() {System.out.println("通過匿名內部類實現接口");}};

但現在可以更簡單的使用

Demo01 demo01 = () -> {System.out.println("demo01");
};

lambda 的標準格式:

(args) -> {};
  • 沒有參數括號中留白

  • 如果方法體只有一條語句,可以省略{},如:

    Demo01 demo01 = () -> System.out.println("lll");
    
  • 如果方法體只有一條return語句,可以簡寫,如:

    Demo02 demo02 = (int s) -> s * s;// 等效于Demo02 demo02 = (int s) -> {return s * s};
    
  • 如果方法體只返回一個新實例,可以簡寫為:

    Demo04 demo04 = HashMap::new;// 等效于Demo04 demo04 = () -> new HashMap();
    

自帶函數接口

java.util.function 包下提供了很多內置的函數式接口,常用的有Predicate<T>Consumer<T>,以及Function<T, R>

Predicate

用來判斷傳入的值是否符合條件

@FunctionalInterface
public interface Predicate<T> {boolean test(T t);// ...
}

示例:

// 用來找出數組中的偶數
package Note.lambda_demo;import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.function.Predicate;public class Main {public Object[] filterInteger(int[] nums, Predicate<Integer> filter) {LinkedList<Integer> result = new LinkedList<Integer>();for (int i = 0; i < nums.length; i++) {if(filter.test(nums[i])){result.add(nums[i]);}}return result.toArray();}public static void main(String[] args) {Predicate<Integer> predicate = (Integer s) -> s % 2 == 0;int [] nums = {-1, 2, 8, -9, 0, 7, -5};Main main = new Main();System.out.println(Arrays.toString(main.filterInteger(nums, predicate)));}
}//~ [2, 8, 0]

Consumer

表示輸入單個參數,返回某個值的操作

@FunctionalInterface
public interface Consumer<T> {void accept(T t);
}

Function

@FunctionalInterface
public interface Function<T, R> {R apply(T t);
}

代表一類函數,這類函數接收一個T類型的參數,返回一個R類型的結果

其他

  • lambda表達式中可以省略參數類型

  • lambda表達式中可以使用實例變量、靜態變量,以及局部變量

  • 如果兩個函數式接口類似,可以簡寫,如:

    package Note.lambda_demo;@FunctionalInterface
    public interface Demo02 {int test(int a);
    }// 又有一個類似的接口Demo03
    package Note.lambda_demo;@FunctionalInterface
    public interface Demo03 {int test(int s);
    }
    

    使用時,可以用::簡寫

    Demo02 demo02 = (int s) -> s * s;demo01.test();
    System.out.println(demo02.test(13));Demo03 demo03 = demo02::test;
    System.out.println(demo03.test(10));
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457468.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457468.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Todo】Java8新特性學習

參考這篇文章吧&#xff1a; http://blog.csdn.net/vchen_hao/article/details/53301073 還有一個系列轉載于:https://www.cnblogs.com/charlesblc/p/6123380.html

jsp調整字體大小font_html font標簽如何設置字體大小?

首先我們先來看看htmlfont標簽是如何來設置字體大小的&#xff1a;都只到htmlfont標簽是個專門用來設置字體的標簽&#xff0c;雖然在html5中用的會很少(因為都用css樣式來設置font標簽里面的屬性)&#xff0c;但是個人覺得font標簽還是相當強大的標簽的&#xff0c;為什么這么…

runtime官方文檔

OC是一種面向對象的動態語言&#xff0c;作為初學者可能大多數人對面向對象這個概念理解的比較深&#xff0c;而對OC是動態語言這一特性了解的比較少。那么什么是動態語言&#xff1f;動態語言就是在運行時來執行靜態語言的編譯鏈接的工作。這就要求除了編譯器之外還要有一種運…

【Java】synchronized關鍵字筆記

Java Synchronized 關鍵字 壹. Java并發編程存在的問題 1. 可見性問題 可見性問題是指一個線程不能立刻拿到另外一個線程對共享變量的修改的結果。 如&#xff1a; package Note.concurrency;public class Demo07 {private static boolean s true;public static void mai…

sql語句分析是否走索引_MySql 的SQL執行計劃查看,判斷是否走索引

在select窗口中&#xff0c;執行以下語句&#xff1a;set profiling 1; -- 打開profile分析工具show variables like %profil%; -- 查看是否生效show processlist; -- 查看進程use cmc; -- 選擇數據庫show PROFILE all; -- 全部分析的類型show index from t_log_account; ##查看…

SQL Server-數據類型(七)

前言 前面幾篇文章我們講解了索引有關知識&#xff0c;這一節我們再繼續我們下面內容講解&#xff0c;簡短的內容&#xff0c;深入的理解&#xff0c;Always to review the basics。 數據類型 SQL Server支持兩種字符數據類型&#xff0c;一種是常規&#xff0c;另外一種則是Un…

【隨記】SQL Server連接字符串參數說明

廢話不多說&#xff0c;請參見 SqlConnection.ConnectionString 。 轉載于:https://www.cnblogs.com/xiesong/p/5749037.html

【設計模式 00】設計模式的六大原則

設計模式的六大原則 參考&#xff1a; 設計模式六大原則 1. 單一職責原則 一個類只負責一個明確的功能 優點&#xff1a; 降低類的復雜度&#xff0c;提高代碼可讀性和可維護性降低變更時對其他功能的影響 2. 里氏替換原則 **原則一&#xff1a;**若 o1 是 C1 的一個實例化…

pb retrieve時停止工作_大佬們掛在嘴邊的PE、PB是什么?

在緊鑼密鼓地準備科創50ETF的發行工作間隙&#xff0c;今天小夏先帶你讀懂最簡單的PE、PB估值指標這兩大指標。01、什么是PE&#xff08;市盈率&#xff09;PE&#xff0c;也就是市價盈利比率&#xff0c;簡稱市盈率。市盈率是指股票價格與每股收益&#xff08;每股收益&#x…

EF CodeFirst 如何通過配置自動創建數據庫當模型改變時

最近悟出來一個道理&#xff0c;在這兒分享給大家&#xff1a;學歷代表你的過去&#xff0c;能力代表你的現在&#xff0c;學習代表你的將來。 十年河東十年河西&#xff0c;莫欺少年窮 學無止境&#xff0c;精益求精 本篇為進階篇&#xff0c;也是彌補自己之前沒搞明白的地方,…

對AutoIt中控件和窗口的理解

經過嘗試&#xff0c;對AutoIt中Control和Window有了新的認識&#xff0c;分享一下 1.Control 現在我想對一個WinForm架構的應用程序進行自動化操作&#xff0c;得到控件Advanced Mode屬性為[Name:XXX]。 然而在該窗口中有多個相同屬性的Control&#xff0c;而依該屬性只能操作…

【設計模式 01】簡單工廠模式(Simple factory pattern)

簡單工廠模式 可以根據參數的不同返回不同類的實例 參考&#xff1a; CSDN|簡單工廠模式 簡單工廠通過傳給工廠類的參數的不同&#xff0c;返回不同的對象&#xff0c;包括三部分組成&#xff1a; 具體的”產品“工廠類&#xff08;實例化并返回”產品“&#xff09;客戶端&am…

[Hadoop]MapReduce多路徑輸入與多個輸入

1. 多路徑輸入 FileInputFormat是所有使用文件作為其數據源的 InputFormat 實現的基類&#xff0c;它的主要作用是指出作業的輸入文件位置。因為作業的輸入被設定為一組路徑&#xff0c; 這對指定作業輸入提供了很強的靈活性。FileInputFormat 提供了四種靜態方法來設定 Job 的…

pvrect r語言 聚類_R語言實現KEGG通路富集可視化

用過KEGG的朋友應該都很熟悉里面的通路地圖。你是否想過如果自己可以控制通路圖將自己的基因繪制在一個通路圖中&#xff0c;那么今天給大家介紹一個新推出的Bioconductor軟件包pathview。這個包可以進行KEGG富集分析。首先&#xff0c;我們不耐煩的介紹下Bioconductor包的安裝…

【設計模式 02】策略模式( Strategy)

策略模式 參考&#xff1a; CSDN | 策略模式百家號 | 策略模式 如果某個系統需要不同的算法&#xff08;如超市收銀的優惠算法&#xff09;&#xff0c;那么可以把這些算法獨立出來&#xff0c;使之之間可以相互替換&#xff0c;這種模式叫做策略模式&#xff0c;它同樣具有三個…

PL/SQL復合變量

復合變量可以將不同數據類型的多個值存儲在一個單元中。由于復合類型可以由用戶自己根據需要定義其結構&#xff0c;所以復合數據類型也稱為自定義數據類型。在PL/SQL中&#xff0c;使用%TYPE聲明的變量類型與數據表中字段的數據類型相同&#xff0c;當數據表中字段數據類型修改…

Android中使用am命令實現在命令行啟動程序詳解

在Android中&#xff0c;除了從界面上啟動程序之外&#xff0c;還可以從命令行啟動程序&#xff0c;使用的是命令行工具am. 復制代碼代碼如下:usage: am [subcommand] [options] start an Activity: am start [-D] -D: enable debugging send a broadcast Intent: am br…

用Visual Studio 2019連接 WSL來編譯調試C/C++項目

因為有作業要在Linux環境下寫&#xff0c;用虛擬機直接卡成PPT&#xff0c;VS code又不會調試&#xff0c;就搞一下VS 2019吧。 環境 windows 10 WSL(Ubuntu 18.04.4) Visual Studio Community 2019 Linux 里要有C/C環境&#xff08;gcc等&#xff09;VS要有 適用于 Linux…

node.js Websocket消息推送---GoEasy

Goeasy, 它是一款第三方推送服務平臺&#xff0c;使用它的API可以輕松搞定實時推送&#xff01;個人感覺goeasy推送更穩定&#xff0c;推送速度快&#xff0c;代碼簡單易懂上手快瀏覽器兼容性&#xff1a;GoEasy推送支持websocket 和polling兩種連接方式&#xff0c;從而可以支…

git 移動分支指針_理解git 中的HEAD指針branch指針

HEAD指針使用git checkout 來移動HEAD指針&#xff0c;移動的對象可以是分支指針也可以是快照。HEAD指針可以指向快照也可以指向branch。當指向branch時提交后會和branch指針一起向后移動&#xff0c;當不指向branch提交時時則會在一個detached狀態。分支(branch)指針使用git b…