import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import org.junit.jupiter.api.Test;
/**
* Java8 内置的四大核心函数式接口:
Consumer<T> : 消费型接口
void accept(T t);
Supplier<T> : 供给型接口
T get();
Function<T,R> : 函数型接口
R apply(T t);
Predicate<T>:断言型接口
boolean test(T t);
*/
public class TestLambda3 {
//Consumer<T> : 消费型接口
public void happy(Double money,Consumer<Double> con) {
con.accept(money);
}
@Test
public void test1() {
happy(1000d, d->System.out.println("小明喜欢汽车模型,一个模型"+d+"元"));
}
//Supplier<T> : 供给型接口
//需求:产生指定个数的整数并放入集合中
public List<Integer> getNumList(int num , Supplier<Integer> sup ){
List<Integer> list = new ArrayList<Integer>();
for(int i =0;i<num;i++) {
int a = sup.get();
list.add(a);
}
return list;
}
@Test
public void test2() {
List<Integer> list = getNumList(10, ()->(int) (Math.random()*100));
System.out.println(list.toString());
list.forEach(System.out::println);
}
//需求:用于字符串处理
public String strHandler(String str,Function<String,String> fc) {
return fc.apply(str);
}
@Test
public void test3() {
String newStr = strHandler("\t\t\t 他是个天才巨星 ",str->str.trim());
System.out.println(newStr);
String newStr2 = strHandler("\t\t\t 他是个天才巨星 ",str->str.substring(7, 9));
System.out.println(newStr2);
}
//Predicate<T>:断言型接口
//需求:将满足条件的字符串放入到集合中
public List<String> filterStr(List<String> list,Predicate<String> pre) {
List<String> strList = new ArrayList<String>();
list.forEach(str->{
if(pre.test(str)) {
strList.add(str);
}
});
return strList;
}
@Test
public void test4() {
List<String> strList = Arrays.asList("Hello","atguigu","Lambda","","www","ok");
List<String> resultList = filterStr(strList, str->str.length()>5);
resultList.forEach(System.out::println);
}
}