7.四大函数式接口(必须掌握)
函数式接口:只有一个方法的接口
例如Runnable
@FunctionalInterface
public interface Runnable {
void run();
}
简化编程模型,在新版本的框架底层大量使用
四大函数式接口:
1.Function接口:泛型设置方法参数类型和返回值类型
public class FunctionDemo {
//重点1:函数式接口Function
static Function function=new Function() {
@Override
public Object apply(Object o) {
System.out.println("输入类型:"+o.getClass().getName());
return o;
}
};
//自己改造的,加入lambda表达式
//重点2:函数式接口使用lambda表达式
static Function<String,String> function2=(String str)->{
System.out.println("输入参数是:"+str);
return str;
};
public static void main(String[] args) {
function.apply(123);
function2.apply("123");
}
}
重点3:当设置了泛型时,lambda的参数可以不设置类型
static Function<String,String> function3=(str)->{
System.out.println("输入参数是:"+str);
return str;
};
2.Predicate:断言型接口,返回boolean值
public class PredicateDemo {
static Predicate predicate=new Predicate() {
@Override
public boolean test(Object o) {
return false;
}
};
static Predicate<String> predicate1=(str)->{
if(str.isEmpty()){
return false;
}else {
return true;
}
} ;
public static void main(String[] args) {
predicate1.test("abc");
}
}
3.Consumer:消费者函数接口:accept(Object)函数,传入参数,不返回任何
public class ConsumerDemo {
static Consumer consumer=new Consumer() {
@Override
public void accept(Object o) {
System.out.println("消费者函数式端口,传入参数,返回void");
}
};
static Consumer<String> consumer1=(str)->{
System.out.println("入参:"+str+" 不返回!");
};
public static void main(String[] args) {
consumer.accept("abc");;
consumer1.accept("abv");
}
}
4.Supplier:提供者函数接口,无传参,有返回值!
public class SupplierDemo {
static Supplier supplier=new Supplier() {
@Override
public Object get() {
System.out.println("不传参,返回内容");
return "返回";
}
};
static Supplier<String> supplier1 = ()->{
System.out.println("不传参数!");
return "返回";
};
public static void main(String[] args) {
supplier.get();
supplier1.get();
}
}