函数式接口:
函数式接口是接口中只有一种抽象方法;
函数式接口作为参数的方法:
public class RunableDemo {
public static void main(String[] args) {
//匿名内部类的方式使用
startThread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"启动线程");
}
});
// lambda表达式来实现,表达式作为参数传递进去;
startThread(() ->
System.out.println(Thread.currentThread().getName()+"启动线程"));
//
}
// 这个方法需要一个接口传入
private static void startThread(Runnable r){
new Thread(r).start();
}
}
常用函数式接口:
java.util.function 包下预定义了大量的函数式接口供我们使用;
主要如下:
1、Supplier接口 主要是生产数据,里面的 get() 方法,返回值是一个泛型,即Supplier<T> 中指定的返回T,最后会作为返回值
public class SupplierDemo {
public static void main(String[] args) {
//使用匿名内部类
String s = getString(new Supplier<String>() {
@Override
public String get() {
return "llp";
}
});
//使用lambda表达式
String s1 = getString(() -> "llp");
}
//定义一个方法返回一个字符串数据
private static String getString(Supplier<String> sup){
return sup.get();
}
}
2、Consumer接口
是一个消费性的接口,接受单个输入参数并且不返回结果的操作;里面有两个方法;
accept(T t) 对给定的参数执行一个指定的操作
andThen (consumer<? super T> after); ,返回一个组合的Consumer
public class ConsumerTest {
public static void main(String[] args) {
String[] strarray ={"s,12","b,13","c,14"};
// lambda 表达式
printInfo(strarray,(String str) ->{String name = str.split(",")[0];
System.out.print("姓名"+name);},
(String str) ->{int age = Integer.parseInt(str.split(",")[1]);
System.out.println("年龄"+age);});
}
private static void printInfo(String[] strArray, Consumer<String> con1,
Consumer<String> con2) {
for (String str:strArray){
con1.andThen(con2).accept(str);
}
}
}
3、Predicate接口
常用方法:
test(T t) 在给定的参数上评估这个词,返回布尔类型,具体的评估方法由lambda重写
4、Function接口