Java8 函數(shù)式接口掃盲


import java.util.Comparator;
import java.util.function.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @ClassName MyFunction
 * @Author Javan
 * @Date 2021/6/30 14:54
 * @Description
 *
 * Function:            接收一個(gè)參數(shù)          object
 * Consumer:            接收一個(gè)參數(shù)          void
 * Predicate:           接收一個(gè)參數(shù)          boolean
 * UnaryOperator:       接收一個(gè)參數(shù)          object
 * BinaryOperator:      接收兩個(gè)參數(shù)          object
 *
 **/
public class MyFunction {

    public interface MyConsumer<T, U, R, S, G>{
        void accept(T t,U u,R r,S s,G g);
        static MyConsumer print() {
            return (p1,p2,p3,p4,p5) -> System.err.println("MyConsumer print -> " + Stream.of(p1,p2,p3,p4,p5).map(String::valueOf).collect(Collectors.joining(",")));
        }
    }

    private static Function f = ((Function) t -> t)
            .andThen(t -> {
                System.err.println(t);
                return t + "then -> ";
            }).andThen(t -> {
                System.err.println(t);
                return t + "then1 -> ";
            }).compose(d -> {
                System.err.println(d);
                return d + "compose -> ";
            }).compose(d -> {
                System.err.println(d);
                return d + "compose1 -> ";
            });

    /**
     * 接收兩個(gè)參數(shù)返回一個(gè)參數(shù)
     */
    static BiFunction<String, Integer, Long> bif = ((BiFunction) (s, i) -> 0l).andThen(t -> {
        System.err.println(t);
        return t + "then -> ";
    });

    /**
     * 消費(fèi)者
     * 接收一個(gè)參數(shù)所刀,然后執(zhí)行方法體潦嘶,沒(méi)有返回值.
     */
    static Consumer<String>            c        = (d)       -> System.err.println("Consumer        -> " + d);
    static BiConsumer<String, Integer> bc       = (b, i)    -> System.err.println("BiConsumer      -> " + b + "-" + i);
    static DoubleConsumer              bbc      = b         -> System.err.println("DoubleConsumer  -> " + b);
    static IntConsumer                 ic       = b         -> System.err.println("IntConsumer     -> " + b);
    static LongConsumer                lc       = b         -> System.err.println("LongConsumer    -> " + b);
    static MyConsumer          mc =    (p1,p2,p3,p4,p5)     -> System.err.println("MyConsumer      -> " + Stream.of(p1,p2,p3,p4,p5).map(String::valueOf).collect(Collectors.joining(",")));

    /**
     * 謂詞
     * 接收一個(gè)參數(shù),返回true or false.
     * 就像漢語(yǔ)中的謂詞,
     * 例如:
     * "貓是動(dòng)物"一句中的"是"就是一個(gè)謂詞,而"貓"是客體砸烦。
     * cat -> animal.containsKey(cat);
     * <p>
     * "3 大于 2"中"大于"是一個(gè)謂詞昙沦。
     * num -> 3>2;
     * <p>
     * 3+1等于5
     * <p>
     * num -> 3+1 == 5;
     */
    static Predicate<String> p = (d) -> true;
    static BiPredicate<String, Integer> bp = (s, i) -> true;


    /**
     * 一元運(yùn)算符
     */
    static UnaryOperator up = d -> d;
    /**
     * 二元運(yùn)算符
     */
    static BinaryOperator<String> bo = (s, v) -> v;
    static BinaryOperator<String> minBo = BinaryOperator.minBy(Comparator.reverseOrder());
    static BinaryOperator<String> maxBo = BinaryOperator.maxBy(Comparator.reverseOrder());

    static DoubleBinaryOperator dbo = (s, v) -> v;
    static IntBinaryOperator ibo = (s, v) -> v;
    static LongBinaryOperator lbo = (s, v) -> v;

    /**
     * 布爾值供應(yīng)商
     * 不接受參數(shù)哈雏,在主體進(jìn)行操作返回true or false.
     */
    static Supplier<Object> s = () -> new Object();
    static BooleanSupplier  bs = () -> true;
    static IntSupplier      is = () -> 1;
    static DoubleSupplier   ds = () -> 1d;
    static LongSupplier     ls = () -> 1l;


    /**
     * 比較大小
     * v1 大于 v2返回true
     *
     * @param args
     */
    static BiPredicate<String, String> compare = (v1, v2) -> ((Comparator<String>) Comparator.naturalOrder()).compare(v1, v2) > 0;


    public static void main(String[] args) {

        System.err.println("--------------------Function");
        f.apply("start ");


        System.err.println("--------------------Predicate");
        System.err.println("Predicate   -> " + p.test("1"));
        System.err.println("BiPredicate -> " + bp.test("1",2));


        System.err.println("--------------------UnaryOperator");
        System.err.println(up.apply("1"));


        System.err.println("--------------------BinaryOperator");
        System.err.println("BinaryOperator        -> " + bo.apply("1", "2"));
        System.err.println("minBy                 -> " + minBo.apply("111", "2"));
        System.err.println("maxBy                 -> " + maxBo.apply("111", "2"));
        System.err.println("DoubleBinaryOperator  -> " + dbo.applyAsDouble(1d, 2d));
        System.err.println("IntegerBinaryOperator -> " + ibo.applyAsInt(1, 2));
        System.err.println("LongBinaryOperator    -> " + lbo.applyAsLong(1l, 2l));


        System.err.println("--------------------Supplier");
        System.err.println("Supplier          -> " + s.get());
        System.err.println("BooleanSupplier   -> " + bs.getAsBoolean());
        System.err.println("IntSupplier       -> " + is.getAsInt());
        System.err.println("DoubleSupplier    -> " + ds.getAsDouble());
        System.err.println("LongSupplier      -> " + ls.getAsLong());


        System.err.println("--------------------Consumer");
        c.accept("1");
        bc.accept("1", 2);
        bbc.accept(1d);
        ic.accept(1);
        lc.accept(1l);
        mc.accept(1,2,3,4,5);
        MyConsumer.print().accept("One", "two", "three", "four", "five");



        System.err.println("--------------------compare");
        System.err.println(compare.test("8", "7"));
    }

}

--------------------Function
start 
start compose1 -> 
start compose1 -> compose -> 
start compose1 -> compose -> then -> 
--------------------Predicate
Predicate   -> true
BiPredicate -> true
--------------------UnaryOperator
1
--------------------BinaryOperator
BinaryOperator        -> 2
minBy                 -> 2
maxBy                 -> 111
DoubleBinaryOperator  -> 2.0
IntegerBinaryOperator -> 2
LongBinaryOperator    -> 2
--------------------Supplier
Supplier          -> java.lang.Object@3532ec19
BooleanSupplier   -> true
IntSupplier       -> 1
DoubleSupplier    -> 1.0
LongSupplier      -> 1
--------------------Consumer
Consumer        -> 1
BiConsumer      -> 1-2
DoubleConsumer  -> 1.0
IntConsumer     -> 1
LongConsumer    -> 1
MyConsumer      -> 1,2,3,4,5
MyConsumer print -> One,two,three,four,five
--------------------compare
true

Process finished with exit code 0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嘁傀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子视粮,更是在濱河造成了極大的恐慌细办,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕾殴,死亡現(xiàn)場(chǎng)離奇詭異笑撞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)钓觉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門茴肥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人荡灾,你說(shuō)我怎么就攤上這事瓤狐。” “怎么了批幌?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵础锐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我荧缘,道長(zhǎng)皆警,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任截粗,我火速辦了婚禮信姓,結(jié)果婚禮上鸵隧,老公的妹妹穿的比我還像新娘。我一直安慰自己意推,他們只是感情好豆瘫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著左痢,像睡著了一般靡羡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俊性,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天略步,我揣著相機(jī)與錄音,去河邊找鬼定页。 笑死趟薄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的典徊。 我是一名探鬼主播杭煎,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卒落!你這毒婦竟也來(lái)了羡铲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤儡毕,失蹤者是張志新(化名)和其女友劉穎也切,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腰湾,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雷恃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了费坊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倒槐。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖附井,靈堂內(nèi)的尸體忽然破棺而出讨越,到底是詐尸還是另有隱情,我是刑警寧澤永毅,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布谎痢,位于F島的核電站,受9級(jí)特大地震影響卷雕,放射性物質(zhì)發(fā)生泄漏节猿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滨嘱。 院中可真熱鬧峰鄙,春花似錦、人聲如沸太雨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)囊扳。三九已至吩翻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锥咸,已是汗流浹背狭瞎。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搏予,地道東北人熊锭。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像雪侥,于是被迫代替她去往敵國(guó)和親碗殷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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