1.什么是函数式(Funtional)接口
- 只包含一个抽象方法的接口, 称为函数式接口.
- 可以通过Lambda表达式来创建该接口的对象.若Lambda表达式抛出一个受检异常(即:非运行异常),那么该异常需要在目标接口的抽象方法上进行声明.
- 可以在一个接口上使用@Functionallnterface注解,这样做可以检查它是否是一个函数式接口.同时javadoc也会包含一条声明,说明这个接口是一个函数式接口
- 在Java.util.function包下定义了Java 8的丰富的函数式接口
2.Javan内置的函数式接口


写法示例:
/*** java内置的4大核心函数式接口* 消费型接口 Consumer<T> void accept(T t)* 供给型接口 Supplier<T> T get()* 函数型按口 Function<T,R> R apply(T,t)* 断定型接口 Predicate<T> booLean test(T,t)*/public class LambdaTest2 {public void test1(){//传统方式happyTime(500, new Consumer<Double>()){@Overridepublic void accept(Double aDouble){System.out.println("学习太累了, 去泡个澡, 价格为: "+ aDouble);}}//------------------------// Lambda方式happyTime(400, money -> System.out.println("学习太累了, 去泡个澡, 价格为: "+ money));}public void happyTime(double money, Consumer<Double> con){con.accept(money);}public void test2(){List<String> list = Arrays.asList("北京","南京","天津","东京","戏精");//传统方式List<String> filterStrs = filterString(list, new Predicate<String>() {@Overridepublic boolean test(String s){return s.contains("京");}});System.out.println(filterStrs);//------------------------// Lambda方式List<String> filterStrs2 = filterString(list,s -> s.contains("京"));System.out.println(filterStrs2);}public List<String> filterString(List<String> list, Predicate<String> pre){ArrayList<String> filterList = new ArrayList<>();for (String s: list) {if (pre.test(s)){filterList.add(s);}}return filterList;}public static void main(String[] args) {LambdaTest2 lt2 = new LambdaTest2();lt2.test2();}}
