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);
}
}