Java学习笔记——函数式接口
生活随笔
收集整理的這篇文章主要介紹了
Java学习笔记——函数式接口
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、函數(shù)式接口概述
函數(shù)式接口:有且僅有一個(gè)抽象方法的接口。 Java中的函數(shù)式編程體現(xiàn)就是Lambda表達(dá)式,所以函數(shù)式接口就是可以適用于 Lambda表達(dá)式使用的接口。只有確保接口中有且僅有一個(gè)抽象方法,Java中的 Lambda表達(dá)式才能順利地進(jìn)行推導(dǎo)。可以在接口定義的上方加上一個(gè)注解@FunctionalInterface來(lái)表示該接口是一個(gè) 函數(shù)式接口。如下所示: @FunctionalInterface public interface MyInterface {void show(); }二、常用的四種函數(shù)式接口
1、Supplier接口 Supplier<T>接口包含了一個(gè)無(wú)參的方法: (1)T get():獲得結(jié)果,該方法不需要參數(shù),它會(huì)根據(jù)某種邏輯返回一個(gè)數(shù)據(jù)。Supplier<T>接口也被稱作生產(chǎn)性接口,get方法返回的數(shù)據(jù)類型和泛型中指定的數(shù)據(jù)類型一致。 例如: public static void main(String[] args) {//Lambda表達(dá)式String s1 = getString(() -> "asdf");System.out.println(s1);//Lambda表達(dá)式int i = getInteger(() -> 2);System.out.println(i);}//定義一個(gè)方法返回整數(shù)private static Integer getInteger(Supplier<Integer> s) {return s.get();}//定義一個(gè)方法返回字符串?dāng)?shù)據(jù)private static String getString(Supplier<String> s) {return s.get();} 2、Consumer接口 Consumer<T>接口包含兩個(gè)方法: (1)void accept(T t):對(duì)給定的參數(shù)進(jìn)行操作 (2)default Consumer<T> andThen(Consumer after):返回一個(gè)組合Consumer 依次執(zhí)行此操作然后執(zhí)行after操作。Consumer<T>接口也被稱作消費(fèi)接口,消費(fèi)的數(shù)據(jù)類型由泛型決定。 public static void main(String[] args) {operatorString("楊玉環(huán)", s -> System.out.println(new StringBuilder(s).reverse()));System.out.println("-----------");operatorString("王昭君", s -> System.out.println(new StringBuilder(s).reverse()), s -> System.out.println(s));}//定義一個(gè)方法消費(fèi)字符串,用不同的方式消費(fèi)同一個(gè)字符串兩次private static void operatorString(String s, Consumer<String> c1, Consumer<String> c2) { // c1.accept(s); // c2.accept(s);c1.andThen(c2).accept(s);}//定義一個(gè)方法消費(fèi)字符串private static void operatorString(String s, Consumer<String> c) {c.accept(s);} 運(yùn)行結(jié)果:環(huán)玉楊-----------君昭王王昭君3、Predicate接口 Predicate<T>接口常用的有四個(gè)方法: (1) boolean test(T t) 對(duì)給定參數(shù)進(jìn)行判斷,返回一個(gè)布爾值 (2) default Predicate<T> negate() 返回一個(gè)邏輯的否定,對(duì)應(yīng)邏輯非 (3) default Predicate<T> and(Predicate other) 返回一個(gè)組合判斷,對(duì) 應(yīng)短路與。 (4) default Predicate<T> or(Predicate other) 返回一個(gè)組合判斷,對(duì) 應(yīng)短路或。 public static void main(String[] args) {boolean b = checkString("aa", s1 -> s1.equals("aa"));System.out.println(b);boolean b1 = checkString("hello", s1 -> s1.length() > 3);System.out.println(b1);System.out.println("=============");boolean b2 = checkString("helloworld", s1 -> s1.equals("aa"), s2 -> s2.length() > 12);System.out.println(b2);}//判斷給定的字符串是否滿足要求private static boolean checkString(String s, Predicate<String> p) { // return p.test(s);return p.negate().test(s);}//同一個(gè)字符串給出兩個(gè)不同的判斷,最后把這兩個(gè)判斷的結(jié)果做邏輯與運(yùn)算的結(jié)果作為最終結(jié)果private static boolean checkString(String s, Predicate<String> p1, Predicate<String> p2) { // boolean b1 = p1.test(s); // boolean b2 = p2.test(s); // // return b1 && b2; // return p1.and(p2).test(s);return p1.or(p2).test(s);} 4、Function接口 Function<T,R>接口有兩個(gè)常用方法: (1) R apply(Function<T,R>) 將此函數(shù)應(yīng)用于給定的參數(shù) (2)default <V> Function<T,?V> andThen?(Function<? super R,?? extends V> after) 返回首先將此函數(shù)應(yīng)用于其輸入的 after函數(shù),然后將 after函數(shù)應(yīng)用于結(jié)果。Function<T,R>接口常用于對(duì)參數(shù)進(jìn)行操作轉(zhuǎn)換,然后返回一個(gè)新的值。 public static void main(String[] args) {convert("1000", s -> Integer.parseInt(s));convert(100, s1 -> String.valueOf(s1));convert("200", s -> Integer.parseInt(s), s2->String.valueOf(s2+100));}//定義一個(gè)方法把字符串類型轉(zhuǎn)換成int類型并輸出private static void convert(String s, Function<String, Integer> f) {Integer i = f.apply(s);System.out.println(i);}//定義一個(gè)方法,把一個(gè)int類型的數(shù)加上一個(gè)整數(shù)后轉(zhuǎn)換成字符串后輸出private static void convert(Integer i, Function<Integer, String> f) {int result = i + 100;String s = f.apply(result);System.out.println(s);}//定義一個(gè)方法把一個(gè)字符串轉(zhuǎn)換成int類型,把int加上一個(gè)整數(shù)后,轉(zhuǎn)換成字符串private static void convert(String s, Function<String, Integer> f1, Function<Integer, String> f2) {String apply = f1.andThen(f2).apply(s);System.out.println(apply);}
總結(jié)
以上是生活随笔為你收集整理的Java学习笔记——函数式接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《最后生还者RE》各版本详情:标准版售价
- 下一篇: 苹果新款MacBook Air曝光:15