你知道 jdk8新特性函数式接口吗?

本文目录:

1、什么是函数式接口?

2、自定义函数式接口

3、作为参数传递的Lanbda表达式

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

5、其他接口

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

什么是函数式接口?

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

2)可以通过Lambda表达式来创建该接口的对象(若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。

3)我们可以在任意函数式接口上使用@FunctionalInterface注释,这样做可以检查它是否是一个函数式接口,同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

自定义函数式接口

@FunctionalInterface
public interface MyFunction {
    public String getValue(String str);
}


函数式接口中使用泛型
@FunctionalInterface
public interface MyFunction2 {
    public R getValue2(T t,T T2);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作为参数传递Lambda表达式:

        作为参数传递给Lambda表达式:为了将Lambda表达式作为参数传递,接收Lambda表达式的参数类型必须是与该Lambda表达式兼容的函数式接口类型

@Test
    public void test2(){
   
//       去除字符串首尾空格
        String s = strHandler("\t\t\t\t\t大夫", (str) -> str.trim());
        System.out.println(s);
//          把小写字母变成大写
        String upper = strHandler("adsaff",(str -> str.toUpperCase()));
        System.out.println(upper);
//            截取字符串 按下标 从0开始
        String s1 = strHandler("满意点个赞,谢谢", (str) -> str.substring(1,4));
        System.out.println(s1);
    }

    public String strHandler(String str,MyFunction mf){
        return mf.getValue(str);
    }

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

JAVA内置四大核心函数式接口

你知道 jdk8新特性函数式接口吗?_第1张图片

* java8 内置的四大核心接口
* Consumer:消费性接口
*       void accept(T t);
* Supplier:供给型接口
*       T get();
* Function: 函数型接口
*       R apply(T t);
* Predicate : 断言型接口
*       boolean test(T t);

1、Consumer:消费性接口       传进一个参数 然后对该参数进行操作 没有返回值 操作了也就纯操作

      void accept(T t);

@Test
    public void run() {
        happy(10000, (m) -> System.out.println("消费了" + m + "元"));
    }

    public void happy(double money, Consumer consumer) {
        consumer.accept(money);
    }

2、Supplier:供给型接口        用于给你产生一些对象 你可以指定你要产生的对象类型

      void accept(T t);

@Test
    public void run2() {
        List numList = getNumList(10, () -> (int) (Math.random() * 100));
        for (Integer integer : numList) {
            System.out.println(integer);
        }
    }

    //需求:产生指定个数的整数,并放入集合中
    public List getNumList(int num, Supplier supplier) {
        List list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            Integer n = supplier.get();
            list.add(n);
        }
        return list;
    }

3、Function函数型接口:传进去一个传参数,返回一个参数,可以通过定义泛型对其类型进行操作

     R apply(T t);

@Test
    public void run3(){
        //去除首尾空格
        String s = strHandler("\t\t\t\t 九点三公分课程", (str) -> str.trim());
        System.out.println(s);
        //截取字符串
        String s1 = strHandler("九点三公分课程", (str) -> str.substring(1, 5));
        System.out.println(s1);
    }
    //需求:用于处理字符串
    public String strHandler(String str, Function function) {
        return function.apply(str);
    }

4、Predicate: 断言型接口 用于一些做一些判断型操作

    boolean test(T t);

@Test
    public void run4(){
        List list = Arrays.asList("action","string","char","shore");
        List strings = filterStr(list, (s) -> s.length() > 5);
        for (String s:strings) {
            System.out.println(s);
        }
    }
    //需求:将满足条件的字符串放入集合中
    public List filterStr(List list, Predicate pre){
        List list1 = new ArrayList<>();
        for (String str:list) {
            if (pre.test(str)){
                list1.add(str);
            }
        }
        return list1;
    }
---------------------------------------------------------------------------------------------------------------------------

其他接口

你知道 jdk8新特性函数式接口吗?_第2张图片

 

 

你可能感兴趣的:(jdk新特性)