您好,登錄后才能下訂單哦!
今天小編給大家分享一下Java中Lambda表達式和函數式接口怎么使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
當Java 8發布時,其中最令人興奮的特性之一就是 Lambda 表達式。Lambda 表達式是一種輕量級、簡潔和高效的函數式編程方法。它可以用來代替 Java 舊有的匿名內部類,提高代碼的可讀性和可維護性。
Lambda 表達式是一個匿名函數,由輸入參數和處理邏輯兩部分組成:
(parameter1, parameter2, ...) -> { code block }
輸入或者輸出可以為空:
() -> System.out.println("Hello, world!")
(a) -> {}
() -> {}
多參數用括號,單參數可以不用括號:
(a,b) -> a+b
a -> System.out.print(a)
多條處理邏輯用花括號,單條處理邏輯可以不用花括號:
(a,b) -> a+b;
(a,b) -> {a+b;a-b;}
要在 Java 中使用 Lambda 表達式,需要將它們賦值給一個函數式接口變量。函數式接口是只包含一個抽象方法的接口,它們提供了一種定義 Lambda 表達式類型的方式。例如,下面的函數式接口 MyInterface
包含了一個抽象方法 doSomething
:
interface MyInterface { void doSomething(); }
要使用 Lambda 表達式實現這個接口,只需要提供一個與 doSomething
方法簽名匹配的 Lambda 表達式即可。例如,下面的代碼使用 Lambda 表達式創建了一個 MyInterface
對象,并調用了它的 doSomething
方法:
MyInterface myLambda = () -> System.out.println("Hello, world!"); myLambda.doSomething();
在這個例子中,我們使用 Lambda 表達式創建了一個 MyInterface
對象,并將它賦值給了 myLambda
變量。然后,我們調用了 myLambda.doSomething()
方法,輸出了 Hello, world!
。
內置函數式接口
JDK8內置實現了一些常用的函數式接口:
接口 | 作用 |
Function | 程序中映射邏輯的抽象 |
Predicate | 程序中判斷邏輯的抽象 |
Consumer | 程序中的消費型邏輯的抽象 |
Suppiler | 程序中的生產邏輯的抽象 |
Function接口,可以定義入參和出參的類型,可用于類型轉換。
代碼示例:
Function<String,Integer> function=(String i)-> Integer.parseInt(i); System.out.println(function.apply("1")==1);
Predicate接口,指定返回值為布爾類型,可用于斷言。
public static void main(String[] args) { Predicate<String> predicate = (s) -> s.length() > 0; // 測試字符串的長度是否>0 System.out.println(predicate.test("hello")); // 結果取反 System.out.println(predicate.negate().test("hello")); System.out.println("=====or / and======"); System.out.println(predicate.test("")); // 增加或判斷,二者滿足其一則為true System.out.println(predicate.or(s -> s.equals("")).test("")); // 增加與判斷,二者都滿足則為true System.out.println(predicate.and(s -> s.equals("hello")).test("")); System.out.println(predicate.and(s -> s.equals("hello")).test("hello")); System.out.println("=====isEqual======"); // 判斷是否相等 System.out.println(Predicate.isEqual("hello").test("")); System.out.println(Predicate.isEqual("hello").test("hello")); Predicate<Boolean> nonNull = Objects::nonNull; Predicate<Boolean> isNull = Objects::isNull; Predicate<String> isEmpty = String::isEmpty; Predicate<String> isNotEmpty = isEmpty.negate(); }
Consumer接口,又叫消費接口,沒有返回值,就像把輸入消費掉了一樣。
public static void main(String[] args) { Consumer<Object> consumer1 = new Consumer<Object>() { @Override public void accept(Object o) { System.out.println("這次消費了:" + o.toString()); } }; consumer1.accept("100w元在雙十一!這下窮死了!"); Consumer<String> consumer2 = s -> System.out.println("這次消費了:" + s); consumer2.accept("120w元在雙十二!又窮死了!"); }
Suppiler接口,又叫生產接口,可以自定義返回值,用來生產一些東西。
public static void main(String[] args) { // 生成一個字符串 Supplier<String> supplier1 = () -> "abcde"; // 生成一個隨機數 Supplier<Integer> supplier2 = () -> new Random().nextInt(10); // 產生一個運行時異常 Supplier<RuntimeException> supplier3 = () -> new RuntimeException(); System.out.println(supplier1.get()); System.out.println(supplier2.get().intValue()); System.out.println(supplier3.get()); }
級聯表達式,含有多個箭頭的lambda表達式,即“套娃”lambda表達式。
以下列lambda表達式為例:
x->y->x+y
假設輸入的為Integer類型,
用Function接口來表達即為:
輸入一個Integer x,返回一個Integer y,
Integer y又可以用Function接口來表示為:
輸入一個Integer,返回一個Integer
Function<Integer,Function<Integer,Integer>> functionFunction= x->y->x+y; System.out.println(functionFunction.apply(2).apply(3));
以上就是“Java中Lambda表達式和函數式接口怎么使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。