一、Functional接口
- 函数式接口,有且仅有一个抽象方法,Object的public方法除外。
- 函数式接口的一大特性就是可以被lambda表达式和函数引用表达式代替。也就是说声明这样的接口,是可以灵活的以方法来传参。
- 以下是Java8内置四大核心函数式接口:
1) 消费型接口
//Represents an operation that accepts a single input argument and returns no result.
@FunctionalInterface
public interface Consumer<T> {
void accept(T t); }
Consumer简单例子:
public class MethodReferenceTest {
@Test
public void testConsumer(){
age(18, a -> System.out.println("my age is: " + a));
}
public void age(int x, Consumer consumer){
consumer.accept(x);
}
}
2) 供给型接口
//There is no requirement that a new or distinct result be returned each time the supplier is invoked.
@FunctionalInterface
public interface Supplier<T> {
T get(); }
Supplier简单例子:
public class MethodReferenceTest {
@Test
public void testSupplier(){
List<Double> list = supplierMethod(10, ()-> Math.random());
for (Double i: list){
System.out.println(i);
}
}
//产生指定个数的整数并放入集合中
public List<Double> supplierMethod(int num, Supplier<Double> supplier){
List<Double> list = new ArrayList<>()