Java8 內置的函數式接口

package com.xx;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author xx
 * DateTime: 2019/11/14 16:42
 * Description: Java8內置四大核心函數式接口
 * Consumer<T>:消費型接口
 *      void accept<T t>
 * Suppier<T>:供給型接口
 *      T get()
 * Function<T, R>:函數型接口
 *      R apply(T t)
 * Predicate<T>:斷言型接口
 *      boolean test(T t)
 *
 * 簡單介紹下:Lambad表達式,用於簡化代碼,並不會對代碼的執行原理產生影響
 *          Lambad的格式:(參數,可以是有參也可以是無參) -> {方法體,一些對參數進行操作的代碼}
 *          ::操作符可以更加簡化代碼,替代箭頭符這種形式
 *          對象::實例方法
 *          類::靜態方法
 *          類::實例方法
 *              eg:
 *                  (x) -> System.out.println(x);
 *                  System.out::println;
 */
public class LambdaTest1 {

    /**
     * Predicate<T>:斷言型接口
     */
    @Test
    public void test3() {
        List<String> list = Arrays.asList("aaaa", "bbb", "cccc", "ddd", "eeee");
        List<String> strings = filterStr(list, (s) -> s.length() > 3);
        System.out.println(strings);
    }


    /**
     * 將滿足條件的字符串放入集合中
     */
    public List<String> filterStr(List<String> list, Predicate<String> pre) {
        ArrayList<String> strList = new ArrayList<>();
        for (String str : list) {
            if(pre.test(str)){
                strList.add(str);
            }
        }
        return strList;
    }


    /**
     * Function<Tm R>函數型接口
     */
    @Test
    public void test2 () {
        String s = strHandler("ahfja45646 dsfsdfjo5465fsd4f", (str) -> str.toUpperCase());
        // 也可以使用::這種方式來寫
       // String s = strHandler("ahfja45646 dsfsdfjo5465fsd4f", String::toUpperCase);
        System.out.println(s);
    }


    /**
     * 字符串處理
     */
    public String strHandler (String str, Function<String, String> fun) {
        return fun.apply(str);
    }

    /**
     * Supplier<T>供給型接口
     */
    @Test
    public void test1 () {
        List<Integer> numberList = getNumberList(10, () -> new Random().nextInt(100));
        numberList.forEach(System.out::println);
        System.out.println(numberList);
    }

    /**
     * 產生一些整數,並放入集合中
   */
    public List<Integer> getNumberList(int num, Supplier<Integer> sup) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            Integer n = sup.get();
            list.add(n);
        }
        return list;
    }

    /**
     * Consumer<T>消費型接口
     */
    @Test
    public void test() {
        happy(10000, (m) -> System.out.println("喫飯花費:" + m + "元"));
    }

    public void happy(double money, Consumer<Double> consumer){
        consumer.accept(money);
    }
}

 

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