日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Java的函數式接口編程示例

來源: 責編: 時間:2024-02-29 14:41:06 178觀看
導讀背景函數式接口是在Java 8中引入的,與Lambda表達式和方法引用一起。這三個特性被添加到Java中,以促進函數式編程并編寫干凈、可讀的代碼。在Java 8之前,需要編寫大量樣板代碼來涵蓋基本功能。例如,為了調用一個函數,首先我

1LG28資訊網——每日最新資訊28at.com

背景

函數式接口是在Java 8中引入的,與Lambda表達式和方法引用一起。這三個特性被添加到Java中,以促進函數式編程并編寫干凈、可讀的代碼。在Java 8之前,需要編寫大量樣板代碼來涵蓋基本功能。例如,為了調用一個函數,首先我們必須創建一個具有所需方法的類,創建類的實例,然后使用實例來調用方法,或者使用具有相應方法的匿名類的另一種方式。1LG28資訊網——每日最新資訊28at.com

使用Lambda表達式,我們可以避免使用具體類和匿名類對象的需求。函數式接口更進一步,因為Lambda表達式只需要實現一個方法,所以可以輕松地實現函數式接口。1LG28資訊網——每日最新資訊28at.com

函數式接口只展示一個功能。例如,一個具有單一方法compareTo()的Comparable接口用于比較目的。但它可以有任意數量的默認方法和靜態方法。1LG28資訊網——每日最新資訊28at.com

Java 8定義了許多函數式接口,可以廣泛用于Lambda表達式。以下是在java.util.Function包中定義的函數式接口列表。1LG28資訊網——每日最新資訊28at.com

@FunctionalInterface注解,按照功能,任何具有單個抽象方法的接口都是函數式接口。Java提供了@FunctionalInterface注解,以將一個接口標記為函數式接口,以便編譯器可以檢查接口是否是函數式接口。此注解是可選的,主要是為了增加編譯器的檢查和增加代碼的可讀性和維護性。1LG28資訊網——每日最新資訊28at.com

函數式接口編程示例

函數式接口的類型:在Java中,主要有四種類型的函數式接口。1LG28資訊網——每日最新資訊28at.com

Predicate函數式接口:Predicate函數式接口是一種方法接受一個參數,并返回true或false的接口。Predicate函數式接口主要用于比較元素以進行排序或根據應用于傳入的輸入的某些條件來過濾值。Java提供了用于基本類型的Predicate函數式接口,如IntPredicate、DoublePredicate和LongPredicate,分別只接受Integer、Double和Long類型的參數。1LG28資訊網——每日最新資訊28at.com

用法

Predicate predicate = (value) -> value != 0; //或者Predicate predicate = (value) -> test(value);

在上面的代碼片段中,predicate函數根據傳入的值返回true或false。1LG28資訊網——每日最新資訊28at.com

示例:

在這個例子中,我們使用predicate函數式接口和lambda表達式來從一個整數列表中過濾出奇數。1LG28資訊網——每日最新資訊28at.com

import java.util.Arrays;import java.util.List;import java.util.function.Predicate;public class Tester {   public static void main(String args[]) {      List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8);      Predicate<Integer> isEvenNumber = n -> n %2 == 0;      numbers =  numbers.stream().filter(isEvenNumber).toList();      System.out.println(numbers);   }}

編譯運行上述程序后,輸出結果為:1LG28資訊網——每日最新資訊28at.com

[2, 4, 6, 8]

Consumer函數式接口:Consumer函數式接口是一種方法接受一個參數,并且不返回任何值的接口。Consumer函數式接口主要用于執行副作用操作。例如,打印一個元素、添加稱謂等。還有其他變種的Consumer,比如BiConsumer。BiConsumer函數式接口可以接受兩個參數。Java提供了用于基本類型的Consumer函數式接口,如IntConsumer、DoubleConsumer和LongConsumer,分別只接受Integer、Double和Long類型的參數。1LG28資訊網——每日最新資訊28at.com

用法:

//定義Consumer consumer = (value) -> System.out.println(value);// 或者Consumer consumer1 = System.out::println;// 使用Consumer consumer2 = (value) -> accept(value);

示例:

在這個例子中,我們借助lambda表達式和方法引用,使用consumer函數式接口來打印整數列表中的所有數字。1LG28資訊網——每日最新資訊28at.com

import java.util.Arrays;import java.util.List;import java.util.function.Consumer;public class Tester {   public static void main(String args[]) {      List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8);      Consumer<Integer> consumer = (value) -> System.out.println(value);      Consumer consumer1 = System.out::println;      System.out.println("Printing using consumer functional interface as lambda expression");      numbers.forEach(consumer);      System.out.println("Printing using consumer functional interface as method reference");      numbers.forEach(consumer1);   }}

編譯運行程序結果如下:1LG28資訊網——每日最新資訊28at.com

Printing using consumer functional interface as lambda expression12345678Printing using consumer functional interface as method reference12345678

Supplier函數式接口:Supplier函數式接口是一種沒有任何參數傳遞且會返回一個值的接口。Supplier函數式接口主要用于延遲生成值。例如,獲取一個隨機數,生成一系列數字等。1LG28資訊網——每日最新資訊28at.com

用法:

//定義Supplier supplier = () -> Math.random() * 10;// 使用Supplier supplier1 = () -> get();

示例:

在這個例子中,我們借助lambda表達式,使用Supplier函數式接口來獲取一個隨機數。1LG28資訊網——每日最新資訊28at.com

import java.util.ArrayList;import java.util.List;import java.util.function.Supplier;public class Tester {   public static void main(String args[]) {      Supplier<Integer> supplier = () -> (int)(Math.random() * 10);      List<Integer> randomNumbers = new ArrayList<>();      // generate 10 random numbers      for(int i = 0; i< 10; i++) {         randomNumbers.add(supplier.get());      }      System.out.println(randomNumbers);   }}

編譯并運行程序,得出運行結果:1LG28資訊網——每日最新資訊28at.com

[0, 8, 8, 8, 8, 5, 7, 5, 5, 9]

Function函數式接口:Function函數式接口是一種方法接受一個參數并返回一個值的接口。Function函數式接口主要用于獲取處理后的值。例如,獲取一個元素的平方,修剪字符串值等。還有其他的Function變體,比如BiFunction。BiFunction函數式接口可以接受兩個參數。Java還提供了針對基本類型的Function函數式接口,如IntFunction、DoubleFunction和LongFunction,分別只接受Integer、Double和Long類型的參數。還有兩個更實用的接口,UnaryOperator擴展了Function接口,BinaryOperator擴展了BiFunction接口。1LG28資訊網——每日最新資訊28at.com

用法:

//定義Function function = (value) -> Math.random() * 10;// 使用Function function1 = (value) -> apply(value);

示例:

在這個例子中,我們借助lambda表達式,使用Function函數式接口來獲取一個平方數。1LG28資訊網——每日最新資訊28at.com

import java.util.Arrays;import java.util.List;import java.util.function.Function;public class Tester {   public static void main(String args[]) {      List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8);      Function<Integer, Integer> squared = (value) -> value * value;        List<Integer> squaredNumbers =  numbers.stream().map(squared).toList();      System.out.println(squaredNumbers);   }}

編譯并運行程序,得出運行結果:1LG28資訊網——每日最新資訊28at.com

[1, 4, 9, 16, 25, 36, 49, 64]

注意事項:

在Java 8之前,已經存在的許多接口被注釋為函數式接口,并可以在lambda表達式中使用。例如:1LG28資訊網——每日最新資訊28at.com

  • Runnable ?提供run() 方法
  • Callable ? 提供 call() 方法
  • Actionlistener ? 提供actionPerformed() 方法
  • Comparable ? 提供 compareTo() 方法比較兩個數的大小

示例:

在這個例子中,我們創建了兩個線程。第一個線程使用匿名類創建,第二個線程使用lambda表達式創建。兩者都使用runnable接口來創建線程實例。1LG28資訊網——每日最新資訊28at.com

public class Tester {   public static void main(String args[]) {      // create anonymous inner class object      new Thread(new Runnable() {         @Override public void run() {            System.out.println("Thread 1 is running");         }      }).start();      // lambda expression to create the object      new Thread(() -> {         System.out.println("Thread 2 is running.");      }).start();      }}

編譯并運行程序,結果:1LG28資訊網——每日最新資訊28at.com

Thread 1 is runningThread 2 is running.

本文鏈接:http://www.www897cc.com/showinfo-26-75320-0.htmlJava的函數式接口編程示例

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 前端視角對Rust的淺析

下一篇: 一個超冷門的 Vue3 內置組件,幫我優化了66%的性能!

標簽:
  • 熱門焦點
  • 28個SpringBoot項目中常用注解,日常開發、求職面試不再懵圈

    前言在使用SpringBoot開發中或者在求職面試中都會使用到很多注解或者問到注解相關的知識。本文主要對一些常用的注解進行了總結,同時也會舉出具體例子,供大家學習和參考。注解
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • 多線程開發帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數據期間,該數據被其他的線程所修改,那么對于當前線程而言,該線程
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
  • OPPO Reno10 Pro英雄聯盟定制禮盒公布:薩勒芬妮同款配色夢幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機,全系標配了超光影長焦鏡頭,是迄今為止拍照
  • 電博會上海爾智家模擬500平大平層,還原生活空間沉浸式體驗

    電博會為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗。程傳
Top 主站蜘蛛池模板: 达尔| 清涧县| 元江| 克拉玛依市| 深州市| 会宁县| 孟州市| 石棉县| 潼南县| 奉节县| 通榆县| 博客| 耿马| 吴川市| 封丘县| 伊金霍洛旗| 北京市| 北海市| 五大连池市| 彭山县| 敦化市| 石阡县| 合作市| 嵊泗县| 房山区| 黑河市| 南城县| 隆昌县| 淅川县| 青神县| 安顺市| 吉首市| 佛坪县| 吉隆县| 台东县| 罗城| 普格县| 嘉鱼县| 招远市| 乌拉特后旗| 台东县|