java8新特性:四大内置核心函数式接口

297 阅读1分钟

函数式接口就是只有一个方法的接口, 它有有个专门的注解, 我们平时使用的Runable 接口就是一个函数式的接口。函数式的接口可以使用lambda 表达式来简化编程。

/*
* java8  内置的四大核心函数式接口
* Consumer<T>:消费型接口  有参数,无返回值类型的接口。
*            void accept(T t);
*
* Suppiler<T> :供给型接口  只有产出,没人输入,就是只有返回值,没有入参
*            T get();
*
* Function<T,R> :函数型接口  输入一个类型得参数,输出一个类型得参数,当然两种类型可以一致
*          R apply(T t);
*
* Predicate<T>:断言型接口   判断是否满足条件  满足再进行下一步操作
*        boolean test(T t);
* */

代码演示如下

public class TestLambda3 {

    //1.Cosumer<T>  消费型接口  传一个参数没有返回值
    @Test
    public void test1(){
        happy(10000,(x)-> System.out.println("租房花去"+x+"元"));
    }

    public void happy(double money, Consumer<Double> con){
        con.accept(money);
    }
    //2.Supplier<T>供给型接口
    @Test
    public void test2(){
        List<Integer> numberList = getNumberList(10, () -> (int) (Math.random() * 100));
        for (Integer integer : numberList) {
            System.out.println(integer);
        }
    }
    //需求:产生指定个数的整数,并放入集合
    public List<Integer> getNumberList(int num, Supplier<Integer> supplier){
        List<Integer> list = new ArrayList();
        for (int i = 0; i <num ; i++) {
            Integer integer = supplier.get();
            list.add(integer);
        }
        return list;
    }
    //3.函数型接口
    @Test
    public void test3(){
        String s = strHandler("\t\t\t 我们都是程序员!!!   ", (str) -> str.trim());
        System.out.println(s);
    }
    //需求:用于处理字符串
    public String strHandler(String str, Function<String,String> function){
        String apply = function.apply(str);
        return apply;
    }

    //4.断言型接口
    @Test
    public void test4(){
      List<String> list = Arrays.asList("hello","atguigu","Lambda","ad");
        List<String> list1 = filterStr(list, (str) -> str.length() > 3);
        for (String s : list1) {
            System.out.println(s);
        }
    }
    //需求:将满足条件的字符串  放入集合中
    public List<String> filterStr(List<String> list, Predicate<String> pre){
        List<String> strList = new ArrayList<>();
        for (String s : list) {
            if(pre.test(s)){
             strList.add(s);
            }
        }
        return strList;
    }
}

其他接口如下

20220103212209.png