/*Java8內建的四大核心函式式介面
阿新 • • 發佈:2018-11-04
package com.greatest.Java8; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; import org.junit.Test; public class TestLambda { /*Java8內建的四大核心函式式介面 Consumer<T>:消費型介面 void accept(T t); * Supplier<T>:供給型介面 * T get() * Function<T,R> 函式型介面 * R apply(T t) * Predicate<T>:斷言型介面 * boolean test(T t) * */ //predicate<T> 斷言型介面 //需求將滿足條件的字串放入集合中、 public List<String > filterStr(List<String > list,Predicate<String> pre){ List<String > strList=new ArrayList<>(); for(String str:list){ if(pre.test(str)){ strList.add(str); } } return strList; } @Test public void Test(){ List<String > list=Arrays.asList("Hello","what","String","Greatest","ok","ojbk"); List<String> strList=filterStr(list, (s)->s.length()>2); for(String str:strList){ System.out.println(str); } } //Function<T,R> 函式型介面 //需求用於處理字串 public String strHandler(String str,Function<String,String> fun){ return fun.apply(str); } @Test public void Test2(){ String newStr=strHandler("\t\t\t\t 格瑞斯 ",(str)->str.trim()); System.out.println(newStr); String newStr1=strHandler("abcdefghijklmnopqrstuvwxyz ",(str)->str.toUpperCase()); System.out.println(newStr1); String newStr2=strHandler("\t\t\t\t 格瑞斯 ",(str)->str.substring(6,10)); System.out.println(newStr2); } //Supplier<T> 供給型介面 //需求 :產生⑩個隨機數 放入集合中 public List<Integer> getNumber(int num,Supplier<Integer> sup){ List<Integer> list=new ArrayList<>(); for(int i=0;i<num;i++){ Integer n=sup.get(); list.add(n); } return list; } @Test public void test3(){ //100以內的十個數 List<Integer> numList=getNumber(10, ()->(int)(Math.random() * 100)); for(Integer num:numList){ System.out.println(num); } } //Consumer<T>消費性介面 @Test public void Test4(){ happy(10000,(m)->System.out.println("您已消費:"+m+"元")); } public void happy(double money,Consumer<Double> con){ con.accept(money); } }