Java学习笔记——函数式接口
生活随笔
收集整理的這篇文章主要介紹了
Java学习笔记——函数式接口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、函數式接口概述
函數式接口:有且僅有一個抽象方法的接口。 Java中的函數式編程體現就是Lambda表達式,所以函數式接口就是可以適用于 Lambda表達式使用的接口。只有確保接口中有且僅有一個抽象方法,Java中的 Lambda表達式才能順利地進行推導。可以在接口定義的上方加上一個注解@FunctionalInterface來表示該接口是一個 函數式接口。如下所示: @FunctionalInterface public interface MyInterface {void show(); }二、常用的四種函數式接口
1、Supplier接口 Supplier<T>接口包含了一個無參的方法: (1)T get():獲得結果,該方法不需要參數,它會根據某種邏輯返回一個數據。Supplier<T>接口也被稱作生產性接口,get方法返回的數據類型和泛型中指定的數據類型一致。 例如: public static void main(String[] args) {//Lambda表達式String s1 = getString(() -> "asdf");System.out.println(s1);//Lambda表達式int i = getInteger(() -> 2);System.out.println(i);}//定義一個方法返回整數private static Integer getInteger(Supplier<Integer> s) {return s.get();}//定義一個方法返回字符串數據private static String getString(Supplier<String> s) {return s.get();} 2、Consumer接口 Consumer<T>接口包含兩個方法: (1)void accept(T t):對給定的參數進行操作 (2)default Consumer<T> andThen(Consumer after):返回一個組合Consumer 依次執行此操作然后執行after操作。Consumer<T>接口也被稱作消費接口,消費的數據類型由泛型決定。 public static void main(String[] args) {operatorString("楊玉環", 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));}//定義一個方法消費字符串,用不同的方式消費同一個字符串兩次private static void operatorString(String s, Consumer<String> c1, Consumer<String> c2) { // c1.accept(s); // c2.accept(s);c1.andThen(c2).accept(s);}//定義一個方法消費字符串private static void operatorString(String s, Consumer<String> c) {c.accept(s);} 運行結果:環玉楊-----------君昭王王昭君3、Predicate接口 Predicate<T>接口常用的有四個方法: (1) boolean test(T t) 對給定參數進行判斷,返回一個布爾值 (2) default Predicate<T> negate() 返回一個邏輯的否定,對應邏輯非 (3) default Predicate<T> and(Predicate other) 返回一個組合判斷,對 應短路與。 (4) default Predicate<T> or(Predicate other) 返回一個組合判斷,對 應短路或。 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);}//同一個字符串給出兩個不同的判斷,最后把這兩個判斷的結果做邏輯與運算的結果作為最終結果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>接口有兩個常用方法: (1) R apply(Function<T,R>) 將此函數應用于給定的參數 (2)default <V> Function<T,?V> andThen?(Function<? super R,?? extends V> after) 返回首先將此函數應用于其輸入的 after函數,然后將 after函數應用于結果。Function<T,R>接口常用于對參數進行操作轉換,然后返回一個新的值。 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));}//定義一個方法把字符串類型轉換成int類型并輸出private static void convert(String s, Function<String, Integer> f) {Integer i = f.apply(s);System.out.println(i);}//定義一個方法,把一個int類型的數加上一個整數后轉換成字符串后輸出private static void convert(Integer i, Function<Integer, String> f) {int result = i + 100;String s = f.apply(result);System.out.println(s);}//定義一個方法把一個字符串轉換成int類型,把int加上一個整數后,轉換成字符串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);}
總結
以上是生活随笔為你收集整理的Java学习笔记——函数式接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《最后生还者RE》各版本详情:标准版售价
- 下一篇: java美元兑换,(Java实现) 美元