函数接口,简写

函数接口: 一个接口中只有一个抽象方法

判断:可以用@FunctionInterface来判断一个接口是否是函数接口

java内置四大函数式接口

接口名—方法
Supplier—get
Consumer—accept
Predicate—test
Function—apply

名字起的很形象了
转

lambda

语法

  • 1.只有一条语句,省略大括号,如果语句是return,省略return.
  • 2.如果只有一个参数,省略小括号.
  • 一般形式 (参数列表)->(方法体)
   @Test
    void Test1(){
//         未使用lambda
       Comparable<Integer> a = new Comparable<>() {
           @Override
           public int compareTo(Integer o) {
               return 0;
           }
       };
    }
    @Test
    void Test2() {
//         一般lambda
        Comparable<Integer> b = (o) -> {
            return 0;
        };
    }
    @Test
    void Test3(){
//         只有一条语句,省略大括号,如果语句是return,省略return. 使用lambda
        Comparable<Integer> c = (o)->0;

    }

方法引用

本质上是lambda

  • 写法
  • 类::静态方法
  • 实例::非静态方法
  • 类::非静态方法
  • 条件
  • a.当函数接口中那个抽象方法A只有一条语句
  • b. 那条语句调用了方法B
  • c.
    • 适用于 类::静态方法/实例::非静态方法A与B的参数列表和返回值相同
    • 适用于 类::非静态方法 A的参数列表中第一个参数是实例且可以调用B方法,后面的参数与B方法的参数列表对应。返回值相同
//    方法引用  类::静态 有返回值
  @Test
    void Test4(){
//     不使用方法引用
         Function<Integer,String> func1 = new Function<>() {
            @Override
            public String apply(Integer integer) {
                return String.valueOf(integer);
            }
        };
//     使用方法引用   
        Function<Integer,String> func2 = String::valueOf;
    }
//    方法引用 类::非静态, 无返回值
    @Test
    void Test5(){
//    不使用方法引用
        Consumer<String> con1 = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
//      使用方法引用
        Consumer<String> con2 = System.out::println;
    }

构造器引用和数组引用

写法 ClassName::new
条件
  • 只有一条语句,且为return
  • 有抽象方法和对应的构造器形参列表相同
//    构造器引用
    @Test
    void Test6(){
//        未使用构造引用
         Supplier<Object> sup1 = new Supplier<>() {
             @Override
             public Object get() {
                 return new Object();
             }
         };
//         使用构造引用
        Supplier<Object> sup2 = Object::new;
    }
    @Test
    void Test7(){
//        不使用数组引用
        Function<Integer,String[]> func1 = new Function<>(){

            @Override
            public String[] apply(Integer integer) {
                return new String[integer];
            }
        };
//        使用数组引用
        Function<Integer,String[]> func2 = String[]::new;

    }
    static char toLowerCase(char ch){
         return (char)(ch-32);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值