Java 常用函數式接口案例之Consumer接口

案例1

import java.util.function.Consumer;

/**
 * java.util.function.Consumer<T>:該接口的作用與Supplier接口作用相反,將創建的參數消費(使用)掉。
 * Consumer接口中包含了唯一一個抽象方法void accept(T t);消費一個指定泛型的數據
 *
 * default Consumer<T> andThen(Consumer<? super T> after) {
 *     Objects.requireNonNull(after);
 *     return (T t) -> { accept(t); after.accept(t); };
 * }
 * andThen();方法將兩個Consumer接口組合在一起,對數據進行消費。
 *
 */
public class ConsumerDemo {
    /*
        定義一個方法,方法的泛型指定爲String,傳遞的參數爲字符串類型的數據,調用accept方法使用該數據
     */
    public static void dealData(String str, Consumer<String> con){
        con.accept(str);
    }

    public static void main(String[] args) {

        //使用Lambda表達式實現函數式編程
        *//*dealData("ABC",(String str)->{
            System.out.println(str);
        });*//*

        //簡化Lambda表達式
       dealData("ABC",str->System.out.println(str));
    }
}

案例2

import java.util.function.Consumer;

/**
 * java.util.function.Consumer<T>:該接口的作用與Supplier接口作用相反,將創建的參數消費(使用)掉。
 * Consumer接口中包含了唯一一個抽象方法void accept(T t);消費一個指定泛型的數據
 *
 * default Consumer<T> andThen(Consumer<? super T> after) {
 *     Objects.requireNonNull(after);
 *     return (T t) -> { accept(t); after.accept(t); };
 * }
 * andThen();方法將兩個Consumer接口組合在一起,對數據進行消費。
 *
 */
public class ConsumerDemo {

    /*
        定義一個方法,方法的泛型指定爲String,傳遞的參數爲字符串類型的數據和兩個Consumer接口,調用accept方法使用該數據
     */
    public static void method(String str, Consumer<String> con1, Consumer<String> con2){
        /*con1.accept(str);
        con2.accept(str);*/
        //使用endThen方法,將兩個Consumer接口連接在一塊
        con1.andThen(con2).accept(str);//先執行con1使用數據,在執行con2使用數據
    }

    public static void main(String[] args) {
        //傳遞的參數爲一個字符串、兩個Lambda表達式
        method("Hello",
                (str)->{
                    System.out.println(str.toUpperCase());
                 },
                (str)->{
                    System.out.println(str.length());
                });
    }
}

案例3:

import java.util.function.Consumer;

/**
 * java.util.function.Consumer<T>:該接口的作用與Supplier接口作用相反,將創建的參數消費(使用)掉。
 * Consumer接口中包含了唯一一個抽象方法void accept(T t);消費一個指定泛型的數據
 *
 * default Consumer<T> andThen(Consumer<? super T> after) {
 *     Objects.requireNonNull(after);
 *     return (T t) -> { accept(t); after.accept(t); };
 * }
 * andThen();方法將兩個Consumer接口組合在一起,對數據進行消費。
 *
 */
public class ConsumerDemo {
 
    public static void main(String[] args) {
        String[] arr = {"AA,男","BB,女","CC,男"};

        //使用匿名內部類實現
       /* printInfo(arr, new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.print("  姓名:"+s.split(",")[0]+"  ");
            }
        }, new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.print("性別:"+s.split(",")[1]);
            }
        });*/

        //使用Lambda表達式實現
        printInfo(arr, s -> System.out.print("姓名:"+s.split(",")[0])
                     , s -> System.out.println("  性別:"+s.split(",")[1]));
    }

    //定義一個方法,傳遞一個數組和兩個Consumer接口
    public static void printInfo(String[] arrs, Consumer<String> con1, Consumer<String> con2){
        for (String arr : arrs) {
            con1.andThen(con2).accept(arr);
        }
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章