Java函數式介面Consumer

来源:https://www.cnblogs.com/chengmi/archive/2019/05/20/10891746.html
-Advertisement-
Play Games

Consumer是java8提供的函數式介面之一,意思為消費者,接受參數而不返回值 方法示例 這個是錯誤示例,(a) -> a * 2是編譯不通過的,因為Consumer是沒有返回值的,lambda一行的時候預設帶return Bad return type in lambda expression ...


Consumer是java8提供的函數式介面之一,意思為消費者,接受參數而不返回值

void accept(T t);

default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }

方法示例

package jdk8.consumer;

import java.util.function.Consumer;

public class ConsumerTest {
    public static void main(String[] args) {

        ConsumerTest consumerTest = new ConsumerTest();
        consumerTest.arithmetic(8, 9, System.out::println, System.out::println);

        Consumer<String> consumer = s -> System.out.println(s.toUpperCase());
        consumer.accept("hello");

        consumerTest.arithmetic1(4, 9, System.out::println, (a) -> a = a + 2);
        consumerTest.arithmetic1(4, 9, System.out::println, (a) -> System.out.println(a * 2));
//        consumerTest.arithmetic1(4, 9, System.out::println, (a) -> a * 2);
        

    }

    public void arithmetic(int i, int s, Consumer<Integer> consumer, Consumer<Integer> consumer1) {
        consumer1.accept(i * s);
        consumer.accept(i + s);
    }

    public void arithmetic1(int a, int b, Consumer<Integer> consumer, Consumer<Integer> consumer1) {
        consumer.andThen(consumer1).accept(a + b);
    }
}

這個是錯誤示例,(a) -> a * 2是編譯不通過的,因為Consumer是沒有返回值的,lambda一行的時候預設帶return

Bad return type in lambda expression: int cannot be converted to void 錯誤信息 意思為返回類型錯誤,無法將int轉為void

andThen是個嵌套方法,可以一直嵌套下去,順序為先執行 accept 後執行參數里的 after.accpet

 

運行結果

72
17
HELLO
13
13
26

Consumer還有多個其他的介面,具體有以下幾種,在使用函數式介面時,若有提供具體類型的介面,就儘量使用此介面,因為具體的類型指定可以避免裝箱拆箱時所帶來的額外資源消耗

BiConsumer    接收兩個參數

IntConsumer    接收一個int參數

LongConsumer    接收一個long參數

DoubleConsumer    收一個double參數

ObjIntConsumer    接收兩個參數  T,int

ObjLongConsumer    接收兩個參數  T,long

ObjDoubleConsumer    接收兩個參數  T,,double

 



 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • day24 01 初識繼承 面向對象的三大特性:繼承,多態,封裝 一、繼承的概念 繼承:是一種創建新類的方式,新建的類可以繼承一個或者多個父類,父類又可稱基類或超類,新建的類稱為派生類或者子類 一個類可以被多個類繼承,先有父類才有子類 一個類可以繼承多個父類 只在python裡面才可以,其他語言不可 ...
  • 起因 為了督促自己更加積極地寫博客,我希望有一個排名系統能讓我看到自己的進步。但是博客園對用戶的排名體系相對是比較少的,主要是推薦博客排行和積分排行;但它們人數少難度大,短期內難以進入排名。因此我決定自力更生,爬取一份博客園粉絲數排行榜。 重要聲明 為避免誤(封)會(號),先做如下聲明: 1、本排行 ...
  • 1、配置環境 1)vcredist_x64,wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b,如下圖 (1)安裝vcredist_x64 (2)安裝wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5. ...
  • Mysql是一個開源的關係型資料庫產品, 採用處理與存儲分離的設計,靈活性高, 這些年已成為互聯網應用上常用的關係型資料庫。互聯網系統特點是高併發,大數據量, 一般瓶頸最終還是會落到資料庫,所以優化mysql是必不可少的。 優化前我們要對Mysql服務內部的邏輯結構有一定瞭解, 有助於我們對優化的深 ...
  • 多線程可以共用全局變數,多進程不能 多線程中,所有子線程的進程號相同,多進程中,不同的子進程進程號不同 線程共用記憶體空間;進程的記憶體是獨立的 同一個進程的線程之間可以直接交流;兩個進程想通信,必須通過一個中間代理來實現 創建新線程很簡單; 創建新進程需要對其父進程進行一次克隆 一個線程可以控制和操作 ...
  • Python中類的聲明,使用,屬性,實例屬性,計算屬性及繼承,重寫 ...
  • Map的繼承關係: Map介面的常用實現類: 1、HashMap、Hashtable(t是小寫) HashMap不是線程安全的,key、value的值都可以是null。 Hashtable是線程安全的,key、value的值都不能是null。 HashMap、Hashtable都是無序的。 如果要使 ...
  • TableGo是基於資料庫的代碼自動生成工具,可以根據資料庫表結構自動生成JavaBean、生成MyBaits的Mapper映射配置文件、生成資料庫設計文檔、生成前後端代碼等,更重要的是可以根據每個項目的不同開發框架編寫自定義模板生成各模塊增刪查改的前後端代碼,讓開發人員的開發效率提高60%以上,... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...