Java8之函数式接口

2022-11-02  本文已影响0人  jeffrey_hjf

函数式接口:

  1. 接口中有且仅有一个抽象方法,
  2. 可以存在多个非抽象方法,例如上述的默认方法和静态方法;
  3. 可以用@FunctionalInterface 注解进行修饰;
  4. 可以隐式转化为lambda表达式。

2.四大函数式接口

有一个输入,有一个输出。里面存在抽象方法:R apply(T t);

代码体验

/**
* @Description:输入一个数求平方
* @Author: yz
* @Version: 1.0.0
* @Date: 2022/7/22
*/
@Test
public void test2() {
    //匿名内部类
    Function function = new Function<Integer, Integer>() {
        @Override
        public Integer apply(Integer n) {
            return n * n;
        }
    };
    System.out.println(function.apply(12));
 
 
    //lambda表达式
    Function<Integer, Integer> func = (n) -> n * n;
    System.out.println(func.apply(12));
}

无参输入,有参输出。里面存在抽象方法:T get();

代码体验

/**
* @Description:输出10以内的整数和
* @Author: yz
* @Version: 1.0.0
* @Date: 2022/7/22
*/
@Test
public void test3() {
    //匿名内部类
    Supplier supplier = new Supplier<Integer>() {
 
 
        @Override
        public Integer get() {
            int sum = 0;
            for (int i = 0; i < 10; i++) {
                sum += i;
            }
            return sum;
        }
    };
    System.out.println(supplier.get());
 
 
    //lambda表达式
    Supplier sup = () -> {
        int sum = 0;
        for (int i = 0; i < 10; i++) {
            sum += i;
        }
        return sum;
    };
    System.out.println(sup.get());
 
}

接收一个参数,无输出 。里面存在抽象方法:void accept(T t);

代码体验

/**
* @Description:true输出1否则为0
* @Author: yz
* @Version: 1.0.0
* @Date: 2022/7/22
*/
@Test
public void test4() {
    //匿名内部类
    Consumer<Boolean> consumer = new Consumer<Boolean>() {
        @Override
        public void accept(Boolean s) {
            System.out.println(s==true?1:0);
        }
    };
  consumer.accept(false);
 
 
    //lambda表达式
    Consumer<Boolean> consu = t -> System.out.println(t==true?1:0);
    consu.accept(false);
}

接收一个类型T的参数,给出判断结果。里面存在抽象方法:boolean test(T t);

代码体验

/**
* @Description:判断字符串是否为空
* @Author: yz
* @Version: 1.0.0
* @Date: 2022/7/22
*/
@Test
public void test1() {
    //匿名内部类
    Predicate predicate = new Predicate<String>() {
        @Override
        public boolean test(String o) {
            return o.isEmpty();
        }
    };
    System.out.println(predicate.test("222"));
 
 
    //lambda表达式
    Predicate<String> pre = (str) -> str.isEmpty();
    System.out.println(pre.test("222"));
}
上一篇 下一篇

猜你喜欢

热点阅读