1. 程式人生 > >Java 8 函式式介面

Java 8 函式式介面

函式式介面:

由@FunctionalInterface註解,簡稱FI。

其中有且只有一個自己獨有的抽象方法,不包括從上級繼承過來的方法。

其中可以有多個預設方法和靜態方法

例如:

@FunctionalInterface
public interface FiTest{

    String get();
    default String toHello(String name){
        return "hello " + name;
}

    default String toBuy(String name){
        return "buy " + name;
}

    static 
String getName(){ return "FiTest"; } //預設從超類繼承的方法 boolean equals(Object obj); }
Java中重要的四個函式式介面(Function,Consumer,Supplier,Predicate)

Function介面:就是函式的意思,傳入一個引數,返回一個值

//Function函式,傳入一個引數,返回一個結果
//<>裡面第一個是引數型別,第二個是返回的結果型別
Function<Integer,Integer> sum = s->s + 10;
Function<Integer,
Integer> mul = s->s*s; //apply就是那個抽象方法:將此函式應用於給定的引數。 Integer apply = sum.apply(123); System.out.println(apply);//結果:133 //compose:返回一個組合函式,先執行引數(mul也是一個function函式)apply方法, //再執行方法呼叫者的apply方法 //--先執行mul的方法10*10=100,再執行sum的方法100+10=110 Integer apply1 = sum.compose(mul).apply(10); System.out.println(apply1);//結果:110
//andThen:返回一個組合函式,先執行方法呼叫者的apply方法,再執行引數的apply的方法 //--先執行sumapply方法10+10=20,再執行mulapply方法20*20=400 Integer apply2 = sum.andThen(mul).apply(10); System.out.println(apply2);//結果:400 //identity:返回一個函式,該函式總是返回其輸入引數。 Function<Object, Object> identity = Function.identity(); Object apply3 = identity.apply("aaa"); System.out.println(apply3);//結果:aaa

Predicate介面:謂語介面,傳入一個引數,返回一個boolean型別的值。相當於中文的‘與’,‘且’,‘非’,‘是’

Predicate<Integer> predicate = s -> s > 10;
// 100大於10
boolean test = predicate.test(100);
System.out.println("是:"+test);
// 10不大於10
Predicate<Integer> negate = predicate.negate();
boolean test1 = negate.test(10);
System.out.println("非:"+test1);
boolean test2 = negate.test(100);
System.out.println("非:"+test2);
Predicate<Integer> predicate2 = s -> s < 20;
//與 大於10小於20以內的
boolean test3 = predicate.and(predicate2).test(15);
System.out.println("與:"+test3);
//或 大於10 或者小於0Predicate<Integer> predicate3 = s -> s < 0;
boolean test4 = predicate.or(predicate3).test(200);
boolean test5 = predicate.or(predicate3).test(-1);
System.out.println("或:"+test4);
System.out.println("或:"+test5);
//結果:
//是:true
//非:true
//非:false
//與:true
//或:true
//或:true
Consumer介面:消費者,就是傳入引數,沒有返回值,表示接受單個輸入引數並返回無結果的操作
//表示接受單個輸入引數並返回無結果的操作
Consumer<String> consumer = s->{
    s = s + 1;
System.out.println(s);
};
//accept:在給定的引數上執行此操作
consumer.accept("aaa");//結果:aaa1
Consumer<String> consumer1 = s->{
    s = s + 2;
System.out.println(s);
};
//andThen:返回一個組合的consumer函式,先執行呼叫者(consumer)accept方法
//再執行引數的accept方法
consumer.andThen(consumer1).accept("abc");
//結果:
//abc1
//abc2
Supplier:提供者,不需要引數可以返回一個結果
//提供者,沒有引數可以返回一個結果
Supplier<String> supplier = ()->{
    String h = "hello ";
h = h + "world";
    return h;
};
//獲取結果
String s = supplier.get();
System.out.println(s);//結果:hello world

相關推薦

Java 8 式式介面 : Supplier、Function、Consumer、Predicate

函式式介面特點 1、三種方法 唯一的抽象方法 使用default定義普通方法(預設方法),通過物件呼叫。 使用static定義靜態方法,通過介面名呼叫。 2、一個新註解@FunctionInterface 如果某一個介面就是為了函式式介面而生的,使用註解@F

Java 8 式式介面,Function,Consumer,Predicate 介面的學習

void accept(T t); 2.1 使用     還是如上的例子,Demo程式碼如下: public class Test { public static void main(String[] args) throws InterruptedException {

Java 8 式式介面

函式式介面:由@FunctionalInterface註解,簡稱FI。其中有且只有一個自己獨有的抽象方法,不包括從上級繼承過來的方法。其中可以有多個預設方法和靜態方法例如:@FunctionalInte

Java式式介面、方法引用

1、函式式介面-概念及格式 函式式介面:有且只有一個抽象方法的介面(可以有其他的方法:預設方法,靜態方法,私有方法…) 2、函式式介面[email protected]註解 1)、在定義函式式介面時,為防止發生定義錯誤,可使用@FunctionalIn

Java 8 常見式式介面使用簡單示例

簡介 JDK 1.8 API包含了很多內建的函式式介面。之所以提供這些介面,是因為它們有比較多的使用場景,通過結合使用lambda表示式,我們可以很方便地利用這些介面將一些邏輯作為變數傳遞甚至組合起來實現更為複雜的邏輯,就像我們將一些普通類物件作為變數傳遞或者組合起來一樣方便。

Java 8 新增式式介面到底是什麼?

Java 8 新增函式式介面到底是什麼? 從 Java 8 開始便出現了函式式介面(Functional Interface,以下簡稱FI) 定義為: 如果一個介面只有唯一的一個抽象介面,則稱之為函式式介面。為了保證介面符合 FI ,通常會在介面類上新增 @FunctionalI

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

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

8000字長文讓你徹底瞭解 Java 8 的 Lambda、式式介面、Stream 用法和原理

> 我是風箏,公眾號「古時的風箏」。一個兼具深度與廣度的程式設計師鼓勵師,一個本打算寫詩卻寫起了程式碼的田園碼農! 文章會收錄在 [JavaNewBee](https://github.com/huzhicheng/JavaNewBee) 中,更有 Java 後端知識圖譜,從小白到大牛要走的路都在裡面。公眾號

初識Lambda表示式2(JDK提供的式式介面的引出)----java

一個小栗子    為了更加深刻的理解lambda表示式,寫了如下一個栗子: package com.nrsc.lambda.MoneyDemo; import java.text.DecimalFormat; @FunctionalInterface inte

初識Lambda表示式3----JDK提供式式介面的引出2---java

寫在前面的話     總感覺上篇部落格有些東西需要補充,於是思來想去寫下了本篇部落格… 1.場景引入     場景: 假如有這樣一種場景,我們的專案裡有好多方法,這些方法的引數都包含一個介面,這些介面雖然其功能各不相同,但是卻都有一個共同點

JAVA基礎程式設計104--式式介面《下》

函式式介面使用案例 一、Runnable /** * 1、Runnable :執行緒啟用介面 * A、void run() * 多執行緒用junit5.0進行單元測試 */ @Test pub

java-數語言程式設計-式式介面以及方法應用

一、lambda表示式     1、 Lambda表示式是匿名內部類的簡化寫法。     Lambda標準格式:     (引數型別 引數名) -> {         方法體;         return 返回值;         }     

Java:部分常用式式介面,Stream流

1、常用函式式介面-Predicate判斷介面 有時候我們需要對某種型別的資料進行判斷,從而得到一個boolean值結果。這時可以 使用java.util.function.Predicate<T>介面。 1)、抽象方法:判斷“是否”,用於判斷,重寫

Java——Lambda表示式、方法引用及內建式式介面

1.Lambda表示式 面向物件的基礎上支援函數語言程式設計 1.1 約束: 介面有且僅有一個抽象方法,如果存在兩個抽象方法,則無法使用函數語言程式設計。 介面有且僅有一個抽象方法,且想要轉化為lambda表示式,加註解 @FunctionalInterface

Function介面 – Java8中java.util.function包下的式式介面

作者:   Mohamed Sanaulla  譯者: 李璟([email protected]) 早先我寫了一篇《函式式介面》,探討了Java8中函式式介面的用法。如果你正在瀏覽Java8的API,你會發現java.util.function中 Function, Supplier

Effective Java 第三版——44. 優先使用標準的式式介面

Tips 《Effective Java, Third Edition》一書英文版已經出版,這本書的第二版想必很多人都讀過,號稱Java四大名著之一,不過第二版2009年出版,到現在已經將近8年的時間,但隨著Java 6,7,8,甚至9的釋出,Java語言發生了深刻的變化。 在這裡第一時間翻譯成中文版。供大

深入學習java原始碼之lambda表示式與式式介面

深入學習java原始碼之lambda表示式與函式式介面 @FunctionalInterface JDK中的函式式介面舉例 java.lang.Runnable, java.awt.event.ActionListener,  java.util.Comparator, java.ut

jdk1.8新特性 式式介面

函式式介面    1、只包含一個抽象方法的介面,稱為函式式介面。    2、你可以通過Lambda 表示式來建立該介面的物件。(若Lambda 表示式丟擲一個受檢異常,那麼該異常需要在目標介面的抽象方法上進行宣告)。    3、我們可以在任意函式式介面上使用@Function

java1.8-式式(Functional)介面

什麼是函式式(Functional)介面 l 只包含一個抽象方法的介面,稱為 函式式介面 。 l

java程式碼之美(14)---Java8 式式介面

Java8 函式式介面 之前寫了有關JDK8的Lambda表示式:java程式碼之美(1)---Java8 Lambda 函式式介面可以理解就是為Lambda服務的,它們組合在一起可以讓你的程式碼看去更加簡潔。 一、概念 1、什麼是函式式介面 概念 所謂的函式式介面, 當然首先是一個介面, 然後就是在這個接