函数式接口

/*
    Lambda表达式
    () -> {}

    Lambda表达式可以代替掉匿名内部类。

    Lambda标准格式
    (数据类型 变量名, 数据类型 变量名) -> {
        方法体;
        return 返回值;
    }

    Lambda表达式省略规则
        1. 参数位置的数据类型可以省略。
        2. 如果参数只有一个,那么可以省略小括号
        3. 如果大括号内只有一条语句,那么可以省略大括号,return,以及分号

    Lambda表示使用前提:
        1. 接口中有且仅有一个需要被重写的抽象方法。
        2. 必须支持上下文推倒。 要么把接口作为参数,要么用接口接收lambda表达式的结果。

    可推导就是可省略
 */
public class Demo01Lambada {
    public static void main(String[] args) {
        //使用匿名内部类创建多线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行了");
            }
        }).start();

        //使用lanbada表达式创建多线程
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName() + "执行了");
        }).start();

        //使用lambada表达式的省略格式
        new Thread(() -> System.out.println(Thread.currentThread().getName() + "执行了")).start();
    }

}

import java.util.ArrayList;
import java.util.Collections;

public class Demo02Lambada {
    public static void main(String[] args) {
        //创建集合添加Person对象
        ArrayList<Person> list = new ArrayList<>();
        list.add(new Person("张三庚", 18));
        list.add(new Person("灭绝师太", 19));
        list.add(new Person("赵丽颖", 18));
        //使用比较器排序对集合中的Person对象按照年龄从小到大进行排序
        /*
        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();
            }
        });*/
        //使用lambda表达式
        Collections.sort(list, (o1, o2) -> o1.getAge() - o2.getAge());
        System.out.println(list);


    }
}
/*
        请定义一个函数式接口 Eatable ,内含抽象 eat 方法,没有参数或返回值。使用该接口作为方法的参数,并进而
        通过Lambda来使用它。
        Lambda表达式是作为接口中抽象方法的内容存在的
        */
public class Demo01LambadaTest {
    public static void method(Eatable eatable) {
        eatable.eat();
    }

    public static void main(String[] args) {
//使用匿名内部类吃
        method(new Eatable() {
            @Override
            public void eat() {
                System.out.println("\"使用匿名内部类吃饭饭, 很难吃\"");
            }
        });
        //使用lambada表达式吃

        method(() -> {
            System.out.println("使用lambada吃饭");
        });



    }

}
package cn.itcast.demo02函数式接口;

public interface Eatable  {
    void eat();
}

 

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

        请定义一个函数式接口 Sumable ,内含抽象 sum 方法,可以将两个int数字相加返回int结果。使用该接口作为方法
        的参数,并进而通过Lambda来使用它
        */
public class Demo02LambdaTest {
    public static void main(String[] args) {
    /* method(new Sumable() {
         @Override
         public int getSum(int a, int b) {
             return a+b;
         }
     });*/
        //使用lambada表达式改进
        method((a, b) -> {
            return a + b;
        });
//        使用lambada表达式改进
        method((a, b) -> a + b);


    }

    public static void method(Sumable sumable) {
        int result = sumable.getSum(10, 20);
        System.out.println(result);
    }
}
package cn.itcast.demo02函数式接口;

public interface Sumable {
   int getSum(int a,int b);
}

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

/*
    函数式接口

    如果一个接口内有且仅有一个需要被重写的方法,那么这个接口就是一个函数式接口

    函数式接口的作用:
        1. 可以当做普通接口去使用  implements
        2. 当做Lambda表达式的使用前提

    有一个注解,可以验证一个接口是否是函数式接口。这个注解叫做FunctionalInterface

    如果一个接口只有一个需要被重写的抽象方法,但是这个接口上面没有FunctionalInterface这个注解,这个
    还是函数式接口
 */
public interface MyInterface {
    void method();

}
public class Fu {
    public void method() {
        System.out.println("父类的方法");
    }
}
public class Zi extends Fu{
    @Override
    public void method() {
        super.method();
    }
}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值