JUC:11四大函数式接口
Lamda表达式好处、Lamda表达式演变、Lamda表达式使用总结
什么是函数式接口
有且只有一个抽象方法(public abstract修饰的方法)的接口,可以有多个非抽象方法,函数式接口可以使用Lamda表达式(Lamda表达式虽然可以简化代码,但可读性差,有些公司是禁用Lamda表达式的)。
四大原生函数式接口
Function:函数型接口
函数型接口:有入参,有返回值,你里面想写什么表达式都可以
Interface Function<T,R>
参数类型
T - 函数输入的类型
R - 函数的结果类型
Function Demo
package functions;
import java.util.function.Function;
public class FunctionTest {
public static void main(String[] args) {
//匿名内部类需要new
Function<String, String> function = new Function<String, String>() {
@Override
public String apply(String str) {
return "你输入:" + str;
}
};
System.out.println(function.apply("sjhajkhjkashjk"));
//Lamda表达式无需new
Function<String, String> function2 = (str) -> {
return "你输入2:" + str;//只有一行代码return是可以省略的,规范一般要写
};
System.out.println(function2.apply("sjhajkhjkashjk"));
}
}
Predicate:判断型接口
判断型接口:有一个入参,返回值指定为布尔值,一般用于判断
Interface Predicate
参数类型
T - T输入的类型
Predicate Demo
package functions;
import org.apache.commons.lang3.StringUtils;
import java.util.function.Predicate;
public class PredicateTest {
public static void main(String[] args) {
//判断是否为空,匿名内部类需要new
Predicate<String> predicate = new Predicate<String>() {
@Override
public boolean test(String str) {
return StringUtils.isBlank(str);
}
};
System.out.println(predicate.test(""));
//Lamda表达式无需new
Predicate<String> predicate2 = (str) -> {
return StringUtils.isBlank(str);
};
System.out.println(predicate2.test("1"));
}
}
Supplier:供给型接口
供给型接口:只有返回值,没有输入值,即供给
Interface Supplier
参数类型
T - 该供应商提供的结果类型
Supplier Demo
package functions;
import java.util.function.Supplier;
public class SupplierTest {
public static void main(String[] args) {
Supplier<String> supplier = new Supplier<String>() {
@Override
public String get() {
return "牛爷爷";
}
};
supplier.get();
Supplier<String> supplier1 = () -> {
return "胡图图";
};
supplier1.get();
}
}
Consumer:消费型接口
消费型接口:只有输入,没有返回值,即消费
Interface Consumer
参数类型
T - 操作输入的类型
Consumer Demo
package functions;
import java.util.function.Consumer;
public class ConsumerTest {
public static void main(String[] args) {
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println("收到了" + s);
}
};
consumer.accept("123");
Consumer<String> consumer1 = (s) -> {
System.out.println("收到了" + s);
};
consumer1.accept("222");
}
}