Java8 内置的四大核心函数式接口:
一、Consumer<T>:消费型接口
void accept(T t);
案例代码:某人消费了多少钱
//Consumer<T>:消费型接口
@Test
public void test1() {
happy(1000.0, (m)->System.out.println("消费了"+m+"元"));
}
public void happy(Double money,Consumer<Double> con) {
con.accept(money);
}
二、Supplier<T>:供给型接口
T get();
案例代码:随机生成n个100以内的整数
//Supplier<T>:供给型接口
@Test
public void test2() {
List<Integer> numList = getNumList(10, ()->(int)(Math.random()*100));
for(Integer num:numList) {
System.out.println(num);
}
}
public List<Integer> getNumList(int num,Supplier<Integer> sup){
List<Integer> list=new ArrayList<>();
for(int i=0;i<num;i++) {
list.add(sup.get());
}
return list;
}
三、Function<T,R>:函数型接口
R apply(T t);
案例代码:过滤字符串去掉空格将Lamdba替换成大写
//Function<T,R>:函数型接口
@Test
public void test3() {
String strHandler = strHandler("\t\t\t学习Lamdba表达式",(s)->s.trim().replace("Lamdba", "LAMDBA"));
System.out.println(strHandler);
}
public String strHandler(String str,Function<String,String> fc) {
return fc.apply(str);
}
四、Predicate<T>:断言型接口
boolean test(T t);
案例代码:过滤出字符串长度大于3的字符串
//Predicate<T>:断言型接口
@Test
public void test4() {
List<String> list=Arrays.asList("String","a","bc","abc","hello");
List<String> filterStr = filterStr(list, (s)->s.length()>2);
for(String str:filterStr) {
System.out.println(str);
}
}
public List<String> filterStr(List<String> strList,Predicate<String> pre){
List<String> list=new ArrayList<>();
for(String str:strList) {
if(pre.test(str)) {
list.add(str);
}
}
return list;
}