java8新特性

常用內(nèi)置函數(shù)接口, 接口只包含一個(gè)抽象方法

  1. 消費(fèi)型接口:Consumer<T> - void accept(T t)
    接受參數(shù)销部,但是無返回值
class ConsumerDemo {
  public static void bath(int money, Consumer<Integer> spendMoney) {
      spendMoney.accept(money);
  }
  public static void main(String[] args) {
      // 我搞了一個(gè)桃村,話費(fèi)了 = 100
      bath(100,x -> System.out.println("我搞了一個(gè)套餐,話費(fèi)了=" + x));
  }
}
  1. 供給型接口:Supplier<T> - T get()
    Supplier 接口翻譯過來就是提供者
    該接口對(duì)應(yīng)的方法類型為 不接受參數(shù)竭贩,但是提供一個(gè)返回值
    使用get()方法獲得這個(gè)返回值
  Supplier<String> getInstance = () -> "HelloWorld!";
  System.out.println(getInstance.get());
  // 控偶值臺(tái)輸出 HelloWorld
  1. 函數(shù)型接口:Function<T,R> - R apply(T t)
    它接受一個(gè)T類型的參數(shù),返回一個(gè)R類型的返回值;
    通過調(diào)用apply方法執(zhí)行內(nèi)容
public class FunctionApiExample {
    /**
    下面這個(gè)方法接受一個(gè)int類型參數(shù)a,返回a+1,符合接受一個(gè)參數(shù),返回一個(gè)值
    所以呢這個(gè)方法就符合Function接口的定義,那要怎么用呢,繼續(xù)看例子
    */
    public static int addOne(int a) {
        return a+1;
    }
    /**
    該方法第二個(gè)參數(shù)接受一個(gè)function類型的行為,然后調(diào)用apply莺禁,對(duì)a執(zhí)行這段行為
    */
    public static int oper(int a, Function<Integer,Integer> action){
        return action.apply(a);
    }

    /* 下面調(diào)用這個(gè)oper方法,將addOne方法作為參數(shù)傳遞 */
    public static void main(String[] args){
        //Function 單獨(dú)使用
        Function<Integer,Integer> f = s->(s*2);
        Integer i = f.apply(2);
        System.out.println(i); //輸出4


        int x = 1;
        int y = oper(1,m -> addOne(m));//這里可以換成方法引用的寫法 int y = oper(x,Operation::addOne(x))
        System.out.printf("x= %d, y = %d", x, y); // 打印結(jié)果 x=1, y=2

        /* 當(dāng)然你也可以使用lambda表達(dá)式來表示這段行為,只要保證一個(gè)參數(shù),一個(gè)返回值就能匹配 */
        y = oper(x, p -> p + 3 ); // y = 4
        System.out.println("y="+y);
        y = oper(x, p -> p * 3 ); // y = 3
        System.out.println("y="+y);
    }
}
  1. 斷言型接口:Predicate<T> - boolean (T t)
    中文中的‘是 不是 中文語法的謂語
    該接口對(duì)應(yīng)的方法為接收一個(gè)T類型參數(shù)留量,返回一個(gè)Boolean類型值;
    多用于判斷與過濾
    使用test()方法執(zhí)行這段行為
       public static void main(String[] args) {
            Predicate<Integer> predOdd = integer -> integer % 2 == 1;
            System.out.println(predOdd.test(5));
            //控制臺(tái)輸出 true
        }
    

方法引用

  • 三種使用情況
    1. 對(duì)象::實(shí)例方法名(非靜態(tài)方法)
          Consumer<String> con = x -> System.out.println(x);
          con.accept("hello,zhangsan"); //hello,zhagnsan
          /**
           *  1. 對(duì)象::實(shí)例方法名(非靜態(tài)方法)
           * Consumer: 方法 void accept(T t)
           * 方法體中用的方法:void println(String x)
           * 如果滿足上面的要求:前面的函數(shù)式接口的參數(shù)和返回值 和 具體方式體實(shí)現(xiàn)中的方法的 參數(shù) 和返回值一致哟冬,那么可以使用方法引用
           */
          PrintStream ps = System.out;
          Consumer<String> con2 = ps::println;
          con2.accept("hello,zhangsan"); //hello,zhagnsan
    
    1. 類::靜態(tài)方法名
          /**
           *  2. 類::靜態(tài)方法名
           *  int compare(T o1, T o2);
           *  int compare(int x, int y);
           */
          // 比較兩個(gè)數(shù)字大小
          Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
          System.out.println(com.compare(100,200)); //-1
          Comparator<Integer> co2 = Integer::compare;
          System.out.println(co2.compare(1,2)); // -1
    
    1. 類::實(shí)例方法名
          /**
           *  3. 類::實(shí)例方法名
           *  使用這個(gè)方法引用的前提是:x 作為方法的調(diào)用者楼熄,y作為方法的實(shí)際參數(shù)
           */
          //比較兩個(gè)字符串是否相等
          BiPredicate<String,String> bp = (x,y) -> x.equals(y);
          System.out.println( bp.test("abc","abc") ); //true
    
          BiPredicate<String,String> bp2 = String::equals;
          System.out.println( bp2.test("abc","abc")); //true
    

Optional解決空指針異常簡單方法

方法引用

Stream 教程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浩峡,隨后出現(xiàn)的幾起案子可岂,更是在濱河造成了極大的恐慌,老刑警劉巖翰灾,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缕粹,死亡現(xiàn)場離奇詭異稚茅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)平斩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門亚享,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绘面,你說我怎么就攤上這事欺税。” “怎么了揭璃?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵晚凿,是天一觀的道長。 經(jīng)常有香客問我瘦馍,道長晃虫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任扣墩,我火速辦了婚禮哲银,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呻惕。我一直安慰自己荆责,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布亚脆。 她就那樣靜靜地躺著做院,像睡著了一般。 火紅的嫁衣襯著肌膚如雪濒持。 梳的紋絲不亂的頭發(fā)上键耕,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音柑营,去河邊找鬼屈雄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛官套,可吹牛的內(nèi)容都是我干的酒奶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼奶赔,長吁一口氣:“原來是場噩夢啊……” “哼惋嚎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起站刑,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤另伍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绞旅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摆尝,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愕宋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了结榄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片中贝。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖臼朗,靈堂內(nèi)的尸體忽然破棺而出邻寿,到底是詐尸還是另有隱情,我是刑警寧澤视哑,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布绣否,位于F島的核電站,受9級(jí)特大地震影響挡毅,放射性物質(zhì)發(fā)生泄漏蒜撮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一跪呈、第九天 我趴在偏房一處隱蔽的房頂上張望段磨。 院中可真熱鬧,春花似錦耗绿、人聲如沸苹支。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽债蜜。三九已至,卻和暖如春究反,著一層夾襖步出監(jiān)牢的瞬間寻定,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工精耐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狼速,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓黍氮,卻偏偏與公主長得像唐含,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沫浆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Lambda表達(dá)式 示例 語法格式1.無參數(shù)無返回值,Lambda箭頭操作符' -> '滚秩,左邊表示參數(shù)列表专执,右邊為...
    Zak1閱讀 477評(píng)論 0 10
  • 1.Lambda表達(dá)式(常用)2.函數(shù)式接口3.方法引用和構(gòu)造器引用4.Stream API(常用)5.接口中的默...
    打不死的小強(qiáng)8號(hào)閱讀 367評(píng)論 0 1
  • java8新特性 原創(chuàng)者:文思 一、特性簡介 速度更快 代碼更少郁油,增加了Lambda 強(qiáng)大的Stream API ...
    文思li閱讀 3,050評(píng)論 1 1
  • 一本股、重要數(shù)據(jù)結(jié)構(gòu)和JVM的改動(dòng) 1.HashMap的改動(dòng) HashMap維護(hù)了一個(gè)Entry數(shù)組,put(K ke...
    一只愛java的貓閱讀 471評(píng)論 0 0
  • 上一節(jié)介紹了Java8新特性中的Lambda表達(dá)式攀痊,本小節(jié)繼續(xù)講解Java8的新特性之二:方法引用。方法引用其實(shí)也...
    架構(gòu)師Javaspring閱讀 799評(píng)論 0 1