函数式接口是指只有一个抽象函数的接口
使用lambda必须要用函数式接口,java8中提供了四大核心函数式接口,我们可以直接使用,就免去了自己写的麻烦
1.Predicate:断言型接口
@Test
public void test4() {
List<String> list = Arrays.asList("Hello","shang","lambda","sss","eatsdgd");
List<String> filterStr = FilterStr(list, s-> s.length() >3);
for(String str : filterStr) {
System.out.println(str);
}
}
//需求:将满足条件的字符串,放入集合中
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;
}
2.Function:函数式接口
@Test
public void test3() {
String newStr= StrHandler("\t\t\t 方梦初醒", (str) -> str.trim());
System.out.println(newStr);
String subStr = StrHandler("天阶夜色凉如水", (str) -> str.substring(2, 5));
System.out.println(subStr);
}
//用于处理字符串
public String StrHandler(String str, Function<String, String> fun) {
return fun.apply(str);
}
3.Supplier:供给型接口
@Test
public void test2() {
List<Integer> numList = getNumList(10, ()->(int)Math.random() * 10 );
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++) {
Integer n = sup.get();
list.add(n);
}
return list;
}
4.Consumer:消费型接口
@Test
public void test1() {
happy(10000, (m) -> System.out.println("买买买"+m));
}
public void happy(double money, Consumer<Double> con){
con.accept(money);
}