新时代的程序员必会:lambda表达式、链式编程、函数式接口、Stream流式计算
函数式接口:只有一个方法的接口。例如:Runnable接口
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
/**
在Java中有大量的FunctionalInterface
使用函数式接口,能够简化编程模型,在新版本的框架中有大量的使用
*/
四大原生函数式接口:
Function函数式接口:
代码测试:
public class Demo01 {
public static void main(String[] args) {
Function function = new Function<String,String>(){
@Override
public String apply(String o) {
return o;
}
};
System.out.println(function.apply("abc"));
}
}
显然,这里的Function接口和Runnable一样,里面只有一个apply方法,我们可以看一下这个Function接口的底层源码:
@FunctionalInterface
public interface Function<T, R> {
//需要我们实现的方法
R apply(T t);
}
可以看到,在这个接口中,只有apply方法需要我们去实现,在创建这个接口的实现类后,需要传递两个泛型,一个是作为apply方法的参数,另一个是作为apply方法的返回值。
由于这个接口只有一个方法需要我们去实现,因此,我们可以使用lambda表达式:
public class FunctionDemo {
public static void main(String[] args) {
Function<String,String> function = (str)->{
return str;
};
System.out.println(function.apply("abc"));
}
}
Function:函数型接口,接收两个参数,第一个为参数类型,返回类型。
Predicate断定型接口:
public class PredicateDemo {
public static void main(String[] args) {
Predicate<String> predicate = (str)->{
return str.isEmpty();
};
System.out.println(predicate.test("ad"));
}
}
Predicate:只有一个参数,返回类型为bool值
Consumer消费型接口:
public class SupplierDemo {
public static void main(String[] args) {
Consumer<String> consumer = (str)->{
System.out.println(str);
};
consumer.accept("abc");
}
}
Consumer:消费型接口,只有输入,没有返回值
Supplier供给型接口
public class SupplierDemo {
public static void main(String[] args) {
Supplier<String> supplier = ()->{
return "abc";
};
System.out.println(supplier.get());
}
}
Supplier:供给型接口,没有参数,只有返回值;