Java8 函数式接口是什么,实例运用

java8-函数式接口

​ 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

​ 函数式接口可以被隐式转换为 lambda 表达式。

Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。
使用@FunctionalInterface注解定义,编译器强制检查是否只有一个抽象方法,这个注解不是必须的,最好要有,这样其他人清楚这个接口是函数式接口。

1、函数式接口实例

1.1、自定义函数式接口

// 		自定义函数接口
@FunctionalInterface
 interface MyFuntion<T> {

//    自定义函数中只能有一个抽象方法

    void sayMessage(T t);

    @Override
    String toString();  //Object中的方法

    static  void  test01(){
        System.out.println("Hello");
    }
    
    default  void  test02(){
        System.out.println("HelloWorld");
    }

}
  /**
         * 自定义函数使用
         * */
//        1.通过lambda表达式定义函数接口的表达式
         MyFuntion<String>  myFuntion = System.out::println;
         myFuntion.sayMessage("hello");
         MyFuntion.test01();
         test("MyFuntion",System.out::println);
         
 //       2.函数式接口作为方法参数,再调用时实现抽象方法
    public static  void test(String sst,MyFuntion<String> funtion){
        funtion.sayMessage(sst);
    }
2.1、Predicate:断言型接口

​ java.util.function.Predicate 接口定义了一个名叫 test 的抽象方法,它接受泛型 T 对象,并返回一个boolean值。在对类型 T进行断言判断时,可以使用这个接口。通常称为断言性接口 。

public` `static` `void` `main(String[] args) {
  ``/**
   ``* 借助Lambda 表达式实现Predicate test方法
    ``*/
  ``Predicate<String> p01=(str)->str.isEmpty()||str.trim().isEmpty();
  ``/**
   ``* 测试传入的字符串是否为空
   ``*/
  ``System.out.println(p01.test(``""``));
  ``System.out.println(p01.test(``" "``));
  ``System.out.println(p01.test(``"admin"``));
}
2.2、Consumer消费型接口

​ java.util.function.Consumer接口定义了一个名叫 accept 的抽象方法,它接受泛型T,没有返回值(void)。如果需要访问类型 T 的对象,并对其执行某些操作,可以使用这个接口,通常称为消费性接口。

使用Consumer实现集合遍历操作:

/**     Consumer
 * 借助Lambda表达式实现Consumer  accept方法
 */
Consumer<Collection> c01 = (collection) -> {
    if (null != collection && collection.size() > 0) {
        for (Object c : collection) {
            System.out.println(c);
        }
    }
};

List<String> list = new ArrayList<String>();
list.add("诸葛亮");
list.add("曹操");
list.add("关羽");

// 遍历list 输出元素内容到控制台
c01.accept(list);
2.3、Function<T,R>函数型接口

​ java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。如果需要定义一个Lambda,将输入的 信息映射到输出,可以使用这个接口(比如提取苹果的重量,或把字符串映射为它的长度),通常称为功能性接口。

使用Function实现用户密码 Base64加密操作:

    /**     Function
    * Function实现用户密码 Base64加密操作
     * */
    // 实现用户密码 Base64加密操作
    Function<String, String> f01 = (password) -> Base64.getEncoder().encodeToString(password.getBytes());
    // 输出加密后的字符串
    System.out.println(f01.apply("123456"));

}
2.4、Supplier供给型接口

​ java.util.function.Supplier接口定义了一个get的抽象方法,它没有参数,返回一个泛型T的对象,这类似于一个工厂方法,通常称为功能性接口。

使用Supplier实现SessionFactory创建:

/**		Supplier
 ``* 产生一个session工厂对象
 ``*/
Supplier<SessionFactory> s = () -> {
  ``return` `new` `SessionFactory();
};
s.get().info();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值