Java 8 Function&BiFunction接口使用

java8 Funciton和BiFunction都是功能性接口埃叭,Function包含一個(gè)入?yún)ⅲ═)名党,一個(gè)出參(R)债鸡,輸入輸出可以是不不同的類型饲漾,BiFunction包含兩個(gè)入?yún)和R吃媒,一個(gè)出參R逐工。

1凶朗、Function<T, R>

下面這個(gè)例子展示了一個(gè)輸入?yún)?shù)<T> String類型睹晒,然后輸出一個(gè)<R> Integer類型

package com.cattles.function;

import java.util.function.Function;

/**
 * @author cattle -  稻草鳥人
 * @date 2020/3/1 下午5:40
 */
public class Java8Function1 {

    public static void main(String[] args) {
        Function<String, Integer> func = x -> x.length();
        Integer apply = func.apply("cattle");
        System.out.println(apply);
    }
}

輸出:

6

2趟庄、Function<T, R> addThen和compose

package com.cattles.function;

import java.util.function.Function;

/**
 * @author cattle -  稻草鳥人
 * @date 2020/3/1 下午5:45
 */
public class Java8Function2 {

    public static void main(String[] args) {
        Function<String, Integer> func1 = x -> x.length();
        Function<Integer, Integer> func2 = x -> x * 2;
        Integer ret = func1.andThen(func2).apply("cattle");
        System.out.println(ret);

        Integer ret2 = func2.compose(func1).apply("cattle");
        System.out.println(ret2);
    }
}

輸出:

12
12

問題:思考addThen和compose的區(qū)別

3、Function復(fù)雜一些的例子

package com.cattles.function;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
import java.util.function.Function;

/**
 * @author cattle -  稻草鳥人
 * @date 2020/3/1 下午10:43
 */
public class Java8Function3 {

    public static void main(String[] args) {
        Java8Function3 obj = new Java8Function3();
        List<String> list = Arrays.asList("java", "python", "C#", "PHP", "javascript");
        List<String> ret = obj.list(list, obj::base64);
        ret.forEach(System.out::println);
    }

    public <T, R> List<R> list(List<T> list, Function<T, R> function) {
        List<R> ret = new ArrayList<>();
        for (T t : list) {
            ret.add(function.apply(t));
        }
        return ret;
    }

    public String base64(String st) {
        return Base64.getEncoder().encodeToString(st.getBytes());
    }
}

輸出:

amF2YQ==
cHl0aG9u
QyM=
UEhQ
amF2YXNjcmlwdA==

4伪很、BiFunction<T, U, R>

package com.cattles.function;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;

/**
 * @author cattle -  稻草鳥人
 * @date 2020/3/1 下午10:54
 */
public class Java8BiFunction1 {

    public static void main(String[] args) {
        BiFunction<Integer, Integer, Integer> func = (T, U) -> T * U;
        System.out.println(func.apply(3, 4));

        Java8BiFunction1 obj = new Java8BiFunction1();
        List<String> list1 = Arrays.asList("a", "b", "c");
        List<Integer> list2 = Arrays.asList(1, 2, 3);
        List<String> result = obj.listCombiner(list1, list2, (a, b) -> a + b);
        System.out.println(result);
    }

    private <T, U, R> List<R> listCombiner(
            List<T> list1, List<U> list2, BiFunction<T, U, R> combiner) {
        List<R> result = new ArrayList<>();
        for (int i = 0; i < list1.size(); i++) {
            result.add(combiner.apply(list1.get(i), list2.get(i)));
        }
        return result;
    }
}


輸出:

12
[a1, b2, c3]

5戚啥、BiFunction<T, U, R> addThen

package com.cattles.function;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;

/**
 * @author cattle -  稻草鳥人
 * @date 2020/3/1 下午11:02
 */
public class Java8BiFunction2 {

    public static void main(String[] args) {
        BiFunction<String, String, String> func1 = (T, U) -> T + U;
        Function<String, String> func2 = x -> x + " Java";
        System.out.println(func1.andThen(func2).apply("I", " Love"));

        List<String> list1 = Arrays.asList("a", "b", "c");
        List<String> list2 = Arrays.asList("1", "2", "3");
        Java8BiFunction2 obj = new Java8BiFunction2();
        List<String> result = obj.listCombiner(list1, list2, String::concat);
        System.out.println(result);
    }

    private <T, U, R> List<R> listCombiner(
            List<T> list1, List<U> list2, BiFunction<T, U, R> combiner) {
        List<R> result = new ArrayList<>();
        for (int i = 0; i < list1.size(); i++) {
            result.add(combiner.apply(list1.get(i), list2.get(i)));
        }
        return result;
    }
}


輸出:

I Love Java
[a1, b2, c3]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锉试,隨后出現(xiàn)的幾起案子猫十,更是在濱河造成了極大的恐慌,老刑警劉巖呆盖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拖云,死亡現(xiàn)場離奇詭異,居然都是意外死亡应又,警方通過查閱死者的電腦和手機(jī)宙项,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來株扛,“玉大人尤筐,你說我怎么就攤上這事《淳停” “怎么了盆繁?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旬蟋。 經(jīng)常有香客問我油昂,道長,這世上最難降的妖魔是什么倾贰? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任秕狰,我火速辦了婚禮,結(jié)果婚禮上躁染,老公的妹妹穿的比我還像新娘鸣哀。我一直安慰自己,他們只是感情好吞彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布我衬。 她就那樣靜靜地躺著叹放,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挠羔。 梳的紋絲不亂的頭發(fā)上井仰,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音破加,去河邊找鬼俱恶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛范舀,可吹牛的內(nèi)容都是我干的合是。 我是一名探鬼主播锭环,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼辅辩,長吁一口氣:“原來是場噩夢啊……” “哼难礼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玫锋,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蛾茉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后撩鹿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谦炬,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年三痰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吧寺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡散劫,死狀恐怖稚机,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情获搏,我是刑警寧澤赖条,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站常熙,受9級(jí)特大地震影響纬乍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裸卫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一仿贬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧墓贿,春花似錦茧泪、人聲如沸蜓氨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穴吹。三九已至,卻和暖如春嗜侮,著一層夾襖步出監(jiān)牢的瞬間港令,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工锈颗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顷霹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓宜猜,卻偏偏與公主長得像泼返,于是被迫代替她去往敵國和親硝逢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姨拥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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

  • 開始 上大學(xué)的時(shí)候就知道java8,lambda表達(dá)式渠鸽。記得有段時(shí)間在寫匿名內(nèi)部類的時(shí)候叫乌,編譯器會(huì)提示可以使用la...
    野狗道人闖紅燈閱讀 486評(píng)論 0 2
  • 在很長的一段時(shí)間里,Java一直是面向?qū)ο蟮恼Z言徽缚,一切皆對(duì)象憨奸,如果想要調(diào)用一個(gè)函數(shù),函數(shù)必須屬于一個(gè)類或?qū)ο笤涫裕缓?..
    Real_man閱讀 642評(píng)論 1 4
  • 一那婉、函數(shù)式接口 函數(shù)式接口有一個(gè)單一的功能來表現(xiàn)板甘。例如,帶有單個(gè)compareTo方法的比較接口详炬,被用于比較的場合...
    年少懵懂丶流年夢閱讀 2,610評(píng)論 0 4
  • 本文主要總結(jié)了《Java8實(shí)戰(zhàn)》盐类,適用于學(xué)習(xí) Java8 的同學(xué),也可以作為一個(gè) API 手冊文檔適用呛谜,平時(shí)使用時(shí)...
    _曉__閱讀 1,788評(píng)論 2 7
  • 最近看了慕課網(wǎng)的《SpringBoot2.0不容錯(cuò)過的新特性 WebFlux響應(yīng)式編程》教程在跳,里面介紹了關(guān)于Jav...
    逆水尋洲閱讀 1,081評(píng)論 0 1