函数式接口的匿名内部类与Lambda表达式的实现

函数式接口的匿名内部类与Lambda表达式的实现,第1张

文章目录
  • 函数式接口
    • 一、函数式接口:
    • 二、Lambda表达式:
    • 三、常用函数式接口:
      • 实现代码:

函数式接口 一、函数式接口:
  • 函数式接口主要指只包含一个抽象方法的接口,如:java.lang.Runnable、java.util.Comparator接口等
  • Java8提供@FunctionalInterface注解来定义函数式接口,若定义的接口不符合函数式的规范便会报错
  • Java8中增加了java.util.function包,该包包含了常用的函数式接口
二、Lambda表达式:
  • Lambda 表达式是实例化函数式接口的重要方式,使用 Lambda 表达式可以使代码变的更加简洁紧凑
  • lambda表达式:参数列表、箭头符号->和方法体组成,而方法体中可以是表达式,也可以是语句块
  • 语法格式:(参数列表) -> { 方法体; } - 其中()、参数类型、{} 以及return关键字 可以省略
三、常用函数式接口:
接口声明功能
Runnablevoid run()既没有参数又没有返回值
Consumervoid accept(T t)有参数没有返回值
SupplierT get()没有参数有返回值
FunctionR apply(T t)有参数有返回值
Predicateboolean test(T t)判断指定的参数是否满足条件
Comparatorint compare(Object o1, Object o2)有多个参数与返回值
实现代码:
  • Runnable
		Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("这是既没有参数又没有返回值的方法");
            }
        };
        runnable.run();

        /*Runnable runnable1 = () -> {System.out.println("Lambda+这是既没有参数又没有返回值的方法");};*/
        // 当方法体中只有一个执行方法时候,{}可以省略
        Runnable runnable1 = () -> System.out.println("Lambda + 这是既没有参数又没有返回值的方法");
        runnable1.run();
  • Consumer
		Consumer consumer = new Consumer() {
            @Override
            public void accept(Object o) {
                System.out.println(o + "这是有参数没有返回值的方法");
            }
        };
        consumer.accept("温馨提示");

        /*Consumer consumer1 = (Object o) -> {System.out.println(o + "Lambda + 这是有参数没有返回值的方法");};*/
        // Lambda有自动类型推断,可以省略参数类型
        /*Consumer consumer1 = (o) -> {System.out.println(o + "Lambda + 这是有参数没有返回值的方法");};*/
        // 当只有一个参数的时候可以去掉小括号
        Consumer consumer1 = o -> {System.out.println(o + "Lambda + 这是有参数没有返回值的方法");};
        consumer1.accept("友情提示");
  • Supplier
		Supplier supplier = new Supplier() {
            @Override
            public Object get() {
                return "这是没参数有返回值方法";
            }
        };
        System.out.println(supplier.get());

        /*Supplier supplier1 = () -> {return "Lambda + 这是没参数有返回值方法";};*/
        // Lambda中return关键字可以去掉
        Supplier supplier1 = () -> "Lambda + 这是没参数有返回值方法";
        System.out.println(supplier1.get());
  • Function
		Function function = new Function() {
            @Override
            public Object apply(Object o) {
                return o + "这是有参数也有返回值方法";
            }
        };
        System.out.println(function.apply("温馨提示"));

        Function function1 = o -> o + "Lambda + 这是有参数也有返回值方法";
        System.out.println(function1.apply("友情提示"));
  • Predicate
		Predicate predicate = new Predicate() {
            @Override
            public boolean test(Object o) {
                if (o.equals("tb")) {
                    return true;
                }
                return false;
            }
        };
        System.out.println(predicate.test("tb"));

        Predicate predicate1 = (o) -> {if (o.equals("tb")) { return true; }return false;};
        System.out.println(predicate1.test("tbb"));
  • Comparator
		Comparator comparator = new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return Integer.parseInt(o1.toString()) + Integer.parseInt(o2.toString());
            }
        };
        System.out.println(comparator.compare("1", "5"));

        Comparator comparator1 = (o1, o2) -> {return Integer.parseInt(o1.toString()) + Integer.parseInt(o2.toString());};
        System.out.println(comparator1.compare(6, 50));

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/757760.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存