1. 程式人生 > >java 8中 Consumer、Function、Predicate、Supplier介面的冒號使用詳解

java 8中 Consumer、Function、Predicate、Supplier介面的冒號使用詳解

今天總結了一下java8中出現的幾個新介面的使用方法,晚上又請教了一下艾哥,非常感謝他的教導,才能有機會寫這篇文章。

話不多說直接上程式碼例項。

class TestClass{

    public void aaa(String aa){}

    public void aaa1(){return;}

    public String bbb1() {return "";}

    public String bbb(String a){return"";}

    public boolean ccc() {return true;}

    public Boolean ccc1(String aa) {return true;}

    public String ddd() {return "";}
}


Consumer的冒號的使用

    TestClass testClass=new TestClass();

例1

Consumer<String> consumer=testClass::aaa;
consumer.accept("111");
public void aaa(String aa){}

解釋:小寫呼叫::和大寫呼叫含義是不一樣的

 小寫呼叫是將accept中的實參當做呼叫方法的入參傳進入,Consumer的泛型要與呼叫方法的入參保持一致,否則會報錯。

上面方法相當於這個形式。testClass.aaa("111");

例2

Consumer<TestClass> consumer1=TestClass::aaa1;
consumer1.accept(new TestClass());
public void aaa1(){return;}

大寫呼叫是將accept中的實參去呼叫冒號後的方法,是呼叫,Consumer的泛型要與類保持一致。

上面方法相當於這個方法。new TestClass().aaa1();

其他幾個介面的用法大致一致,含義大致相同,下面貼出程式碼,請自行寫例子。

Function
例3
Function<String,String> function=testClass::bbb;
function.apply("222");
public String bbb(String a){return "";}
testClass.bbb("222")

 例4


Function<TestClass,String> function1=TestClass::bbb1;
function1.apply(new TestClass());
public String bbb1() { return "";}
new TestClass().bbb1();

Predicate
例5
Predicate<TestClass> predicate=TestClass::ccc;
predicate.test(new TestClass());
public boolean ccc() {return true;}
new TestClass().ccc();

    例6
Predicate<String> predicate1=testClass::ccc1;
predicate1.test("333");
public Boolean ccc1(String aa) { return true;}
testClass.ccc1("333");
Supplier
例7
這種方法是不能被呼叫的,理由自己想
Supplier<TestClass> supplier=TestClass::XXX;
例8
Supplier<String> supplier1=testClass::ddd;
supplier.get();
public String ddd() {return "";}
testClass.ddd();





相關推薦

java 8 ConsumerFunctionPredicateSupplier介面冒號使用

今天總結了一下java8中出現的幾個新介面的使用方法,晚上又請教了一下艾哥,非常感謝他的教導,才能有機會寫這篇文章。話不多說直接上程式碼例項。class TestClass{ public void aaa(String aa){} public void

Java 8一些常用的全新的函式式介面

函式式介面 什麼是函式式介面? 函式式介面,@FunctionalInterface,簡稱FI,簡單的說,FI就是指僅含有一個抽象方法的介面,以@Functionalnterface標註,注意⚠️,這裡的抽象方法指的是該介面自己特有的抽象方法,而不包含它從其

PredicateConsumer介面Java 8java.util.function包下的介面

原文連結 作者:   Mohamed Sanaulla  譯者: 李璟([email protected]) 早先我寫了一篇《函式式介面》,探討了部分Java 8中函式式介面的用法。我也提及了Predicate介面屬於java.util.function包,在這篇文章中,我將展示如何

Java 8 Date與LocalDateTimeLocalDateLocalTime互轉

Java 8中 java.util.Date 類新增了兩個方法,分別是from(Instant instant)和toInstant()方法 // Obtains an instance of Date from an Instant object. public stat

集合去重 (集合元素為引用型別)--- java 8 新特性 --- 根據元素單屬性多屬性實現去重

1. 程式碼寫法: (要求 JDK 1.8 或 1.8 以上) package gentle.entity; import lombok.Data; /** * * @author sile

java程式碼操作Redis:單機redis叢集redis(spring+redis整合)

一、準備 關於redis的一些安裝,可以檢視我的幾篇文章自行安裝:Redis目錄。匯入java的Redis客戶端依賴包Jedis:<dependency> <groupId>redis.clients</groupId

JAVA 8 Stream API 對Stream進行分組分割槽

這篇文章展示瞭如何使用 Streams API 中的 Collector 及 groupingBy 和 partitioningBy 來對流中的元素進行分組和分割槽。 思考一下 Employee 物件流,每個物件對應一個名字、城市和銷售數量,如下表所示: +------

java 8撤銷永久代,引入元空間

問題 java 8 性能問題 ror 虛擬機 rac 錯誤 元空間 規範 撤銷永久代,引入元空間:   在 JDK 1.8 中,HotSpot 已經沒有 “PermGen space”這個空間了,取而代之是一個叫做 Metaspace(元空間) 的東西。   Java7中已

Java 8如何處理日期和時間

工廠方法 相同 例如 屬性。 ant arch java 去掉 靜態常量 常有人問我學習一個新庫的最好方式是什麽?我的答案是在實際項目中使用它。項目中有很多真正的需求驅使開發者去發掘並學習新庫。簡單得說就是任務驅動學習探 索。這對Java 8新日期時間API也不例外。我創建

20 個案例教你在 Java 8 如何處理日期和時間?

靜態方法 catch 完全 是把 AD 時間 如何判斷 before .com 前言 前面一篇文章寫了《SimpleDateFormat 如何安全的使用?》, 裏面介紹了 SimpleDateFormat 如何處理日期/時間,以及如何保證線程安全,及其介紹了在 Java

Java 8 的方法引用

時間 情況 arrays 抽象 以及 eth ted 方式 消費 一、原理概要 lambda 表示式,可以作為某些匿名內部類的替代。主要目的是調用該內部類中的方法,而該方法的實現(重寫)由 lambda表示式決定。 通常,我們可能不關心匿名內部類中的具體方法(被重寫的方法)

Java 8如何使用ASM和JiteScript“烘焙”你自己的lambda

多個 不存在 void java字節碼 block 設計思想 興趣 sys bytearray 呃,Java字節碼。我們已經在理解Java字節碼一文中已經討論過,但繼續加深下記憶吧:Java字節碼是源代碼的二進制表示,JVM可以讀取和執行字節碼。 現在Java中廣泛使用字節

Java 8 的 Lambda 表達式

div 調用 對象 目標 image face 怎麽 lambda bsp Lambda 表達式是 Java 8 最受歡迎的功能。人們將函數式編程的概念引入了 Java 這門完全面向對象的命令式編程語言。 關於函數式編程是如何運作的,這個話題超出了本文的範圍,不過我們會提

Java(8)List的遍歷方式

system pack map 新建 lam entry lambda googl list() ============Java8之前的方式==========Map<String, Integer> items = new HashMap<>()

Java 8的靜態代理和動態代理的簡單心得

歡迎來到我的第一個部落格 個人學習的一點心得,第一次寫寫的不好見諒 看看程式碼吧 程式碼1. public interface CarSales { void sell(); } 程式碼2. public class QQCar implements

python呼叫R語言通過rpy2 進行互動安裝配置(R_USERR_HOME配置)

python中呼叫R語言通過rpy2 進行詳解 文章目錄 python中呼叫R語言通過rpy2 進行詳解 1.R語言的安裝: 2.Rpy2工具的安裝和配置 3.pycharm中使用R語言配置

Java 8 的 新特性Streams

Stream 作為 Java 8 的一大亮點,它與 java.io 包裡的 InputStream 和 OutputStream 是完全不同的概念。 使用 Stream API 無需編寫一行多執行緒的程式碼,就可以很方便地寫出高效能的併發程式。所以說,Java 8 中首次出現的 java.util.

淺談Java 8的方法引用(Method References)

  本人接觸Java 8的時間不長,對Java 8的一些新特性略有所知。Java 8引入了一些新的程式設計概念,比如經常用到的 lambda表示式、Stream、Optional以及Function等,讓人耳目一新。這些功能其實上手並不是很難,根據別人的程式碼抄過來改一下,並不要知道內部的實現原理,也可以很熟

Java 8stream相關用法

jdk1.8新加了lambda表示式,可以幫助開發者更好的,更高效的實現一些通常複雜的程式碼實現 1.list轉換map Map<Integer, String> mappedMovies = ghslist.stream().collect( Collectors.toMap(

Java 8HashMap和LinkedHashMap如何解決衝突

什麼時候會產生衝突?? HashMap中呼叫hashCode()方法來計算hashCode。 由於在Java中兩個不同的物件可能有一樣的hashCode,所以不同的鍵可能有一樣hashCode,從而導致衝突的產生。 解決: 在Java 8 之前,HashMap和其他基於map