Java爲了程序員方便使用Lambda表達式,Java內置了四個核心函數式接口

Java爲了程序員方便使用Lambda表達式,Java內置了四個核心函數式接口

package com.scc.lambda;

import java.util.ArrayList;
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;

/**
 *  對這四種核心函數式接口的使用
 *  用lambda表達式的時候,有些參數的變量是可以自己隨意定義的,但是類型會根據它的實現接口的類型繼承下來
 *  例如:Myfunction(String str,Function<String, String> fun) 這個方法
 *  R apply(T t);   這個是function的抽象類  
 *  在實現類中 Myfunction("   hello Alice    ", f->f.trim());
 *  這個f就是隨意定義的
 * @author scc
 */
public class Demo4 {
    public static void main(String[] args) {
        System.out.println("---------消費型接口的使用  Consumer--------------");
        happy(20000.0, m->System.out.println("聚餐消費了:"+m+"元"));
        
        System.out.println("--------供給型接口  Supplier--------------");
        List<Integer> randomList = getRandom(9, ()->new Random().nextInt(101));
        System.out.println(randomList);
        
        System.out.println("--------函數型接口   --------------");
        String f1 = Myfunction("   hello Alice    ", f->f.trim());
        System.out.println("去掉字符串兩頭的空格:"+f1);
        String f2 = Myfunction("HELLO ALICE", f->f.toLowerCase());
        System.out.println("把大寫字母轉換成小寫字母:"+f2);
        
        System.out.println("-------斷言型接口   --------------");
        List<String> list=new ArrayList<>();
        list.add("張三");
        list.add("李四");
        list.add("王五");
        list.add("張三丰");
        list.add("張會");
        list.add("趙六");
        //找到所有姓張的人 在實現類重寫的方法中  定義判斷邏輯
        List<String> mydemo = mydemo(list, s->s.startsWith("張"));
        System.out.println(mydemo);
    }
    
    //消費型接口的使用  Consumer   聚餐例子
    public static void happy(Double money,Consumer<Double> com) {
        com.accept(money);
    }
    //供給型接口  Supplier    產生給定個數的隨機數  0-100之間
    public static List<Integer> getRandom(int count,Supplier<Integer> sup) {
        List<Integer> list=new ArrayList<>();
        for(int i=0;i<count;i++) {
            list.add(sup.get());
        }
        return list;
    }
    //函數型接口   
    public static String Myfunction(String str,Function<String, String> fun) {
        return fun.apply(str);
    }
    //斷言型接口   
    public static List<String> mydemo(List<String> list,Predicate<String> pre){
        List<String> mylist=new ArrayList<>();
        for (String s : list) {
            if(pre.test(s)) {
                mylist.add(s);
            }
        }
        return mylist;
    }
    
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章