函数式接口:
- 接口中有且仅有一个抽象方法,
- 可以存在多个非抽象方法,例如上述的默认方法和静态方法;
- 可以用@FunctionalInterface 注解进行修饰;
- 可以隐式转化为lambda表达式。
2.四大函数式接口
有一个输入,有一个输出。里面存在抽象方法:R apply(T t);
代码体验
/**
* @Description:输入一个数求平方
* @Author: yz
* @Version: 1.0.0
* @Date: 2022/7/22
*/
@Test
public void test2() {
//匿名内部类
Function function = new Function<Integer, Integer>() {
@Override
public Integer apply(Integer n) {
return n * n;
}
};
System.out.println(function.apply(12));
//lambda表达式
Function<Integer, Integer> func = (n) -> n * n;
System.out.println(func.apply(12));
}
无参输入,有参输出。里面存在抽象方法:T get();
代码体验
/**
* @Description:输出10以内的整数和
* @Author: yz
* @Version: 1.0.0
* @Date: 2022/7/22
*/
@Test
public void test3() {
//匿名内部类
Supplier supplier = new Supplier<Integer>() {
@Override
public Integer get() {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
return sum;
}
};
System.out.println(supplier.get());
//lambda表达式
Supplier sup = () -> {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
return sum;
};
System.out.println(sup.get());
}
接收一个参数,无输出 。里面存在抽象方法:void accept(T t);
代码体验
/**
* @Description:true输出1否则为0
* @Author: yz
* @Version: 1.0.0
* @Date: 2022/7/22
*/
@Test
public void test4() {
//匿名内部类
Consumer<Boolean> consumer = new Consumer<Boolean>() {
@Override
public void accept(Boolean s) {
System.out.println(s==true?1:0);
}
};
consumer.accept(false);
//lambda表达式
Consumer<Boolean> consu = t -> System.out.println(t==true?1:0);
consu.accept(false);
}
接收一个类型T的参数,给出判断结果。里面存在抽象方法:boolean test(T t);
代码体验
/**
* @Description:判断字符串是否为空
* @Author: yz
* @Version: 1.0.0
* @Date: 2022/7/22
*/
@Test
public void test1() {
//匿名内部类
Predicate predicate = new Predicate<String>() {
@Override
public boolean test(String o) {
return o.isEmpty();
}
};
System.out.println(predicate.test("222"));
//lambda表达式
Predicate<String> pre = (str) -> str.isEmpty();
System.out.println(pre.test("222"));
}
网友评论