JDK8新特性-函数式接口


函数式接口

一、什么是函数式接口?

只包含一个抽象方法的接口,称为函数式接口。

我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检 查它是否是一个函数式接口。

Lambda表达式就是一个函数式接口的实例。

所以以前用匿名实现类表示的现在都可以用Lambda表达式来写

二、java内置的4大核心函数式接口

public class FuncInterfaceTest {
    @Test
    public void test1(){
        happyTime(500, money -> System.out.println("花费了" + money + "元"));
    }

    public void happyTime(double money, Consumer con){
        con.accept(money);
    }

    @Test
    public void test2(){
        List list = Arrays.asList("北京", "南京", "天津", "东京");
        List result = filterString(list, s -> s.contains("京"));
        Iterator iterator = result.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

    //根据给定的规则,过滤集合中的字符串。此规则由Predicate的方法决定
    public List filterString(List list, Predicate pre){
        ArrayList filterList = new ArrayList<>();
        for (String s : list) {
            if (pre.test(s)){
                filterList.add(s);
            }
        }

        return filterList;
    }
}