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

Posted 技术很low的瓜贼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式接口的匿名内部类与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()没有参数有返回值
Function<T,R>R 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));

以上是关于函数式接口的匿名内部类与Lambda表达式的实现的主要内容,如果未能解决你的问题,请参考以下文章

JAVA——进阶语法——使用lambda表达式(λ)进行函数式编程,对匿名内部内代码简化思路及案例在线程中的应用

Lambda表达式和匿名内部类的异同

Lambda表达式

Lambda表达式与函数式接口

jdk1.8新特性之lambda表达式

Java之lambda表达式与函数式接口