首页 > 其他分享 >函数式接口-使用Lambda作为参数和返回值

函数式接口-使用Lambda作为参数和返回值

时间:2022-08-21 10:58:34浏览次数:56  
标签:String 接口 参数 返回值 方法 public Lambda

使用Lambda作为参数和返回值

如果抛开实现原理不说,Java中的Lambda表达式可以被当作是匿名内部类的替代品。如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用函数式接口作为方法参数。

函数接口作为方法的参数案例:

例如 java.lang.Runnable 接口就是一个函数式接口,

假设有一个 startThread 方法使用该接口作为参数,那么就可以使用Lambda进行传参。这种情况其实和 Thread 类的构造方法参数为 Runnable 没有本质区别。

代码:

public class ARunnable {
    //定义一个方法startThread,方法的参数使用函数式接口Runnable
    public static void startThread(Runnable run){
        //开启多线程
        new Thread(run).start();
    }

    public static void main(String[] args) {
        //调用startThread方法,方法的参数是一个接口,那么我们可以传递这个接口的匿名内部类
         startThread(new Runnable() {
             @Override
             public void run() {
                 System.out.println(Thread.currentThread().getName()+"-->"+"线程启动了 ");
             }
         });

        //调用startThread方法,方法的参数是一个函数式接口,所以可以传递Lambda表达式
        startThread(()-> System.out.println(Thread.currentThread().getName()+"-->"+"线程启动了"));
    }

函数接口作为方法的返回值案例:

如果一个方法的返回值类型是一个函数式接口,那么就可以直接返回一个Lambda表达式。
当需要通过一个方法来获取一个java.util.Comparator 接口类型的对象作为排序器时,就可以调该方法获取。

代码:

public class AComparator {
    //定义一个方法,方法的返回值类型使用函数式接口Comparator
    public static Comparator<String> getComparator(){
        //方法的返回值类型是一个接口,那么我们可以返回这个接口的匿名内部类
//        return new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                //按照字符产的降序排序
//                return o2.length()-o1.length();
//            }
//        };
        //使用Lambda优化
//        return (String o1,String o2)->{
//            return o2.length()-o1.length();
//        };
        //继续优化
        return ((o1, o2) -> {
            return o2.length()-o1.length();
        });
    }

    public static void main(String[] args) {
        //创建一个字符串数组0
        String[] arr = {"aaaa","b","ccccc","dddddddddddddddd"};
        //输出排序前的数组
        System.out.println(Arrays.toString(arr));
        //调用Arrays中的方法sort,对字符串数组进行排序
        Arrays.sort(arr, getComparator());
        //输出排序后的数组
        System.out.println(Arrays.toString(arr));
    }
}

 

标签:String,接口,参数,返回值,方法,public,Lambda
From: https://www.cnblogs.com/qihaokuan/p/16609324.html

相关文章

  • 「安装」推荐一个接口文档管理工具 YApi
    在文章开始之前,还是简单摘录官方对YApi的介绍,给用过和没用的读者简单说明一下YApi是什么。YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提......
  • 给 TypeScript 回调函数定义接口
    回调函数定义接口就目前我所知道的有两种方式,第一个就是直接声明一个interface,第二个就是直接在函数的回调函数参数写类型。(1)第一种:定义接口,回调函数直接使用接口interf......
  • 函数式编程-Lambda的延迟执行
    函数式编程在兼顾面向对象特性的基础上,Java语言通过Lambda表达式与方法引用等,为开发者打开函数式编程的大门,下面我们做一个初探Lambda的延迟执行 有些场景的代码执行后......
  • c++ lambda学习举例
    #include<iostream>#include<vector>#include<algorithm>#include<cmath>#include<ctime>usingstd::cout;usingstd::vector;usingstd::srand;usingstd::time......
  • 函数式接口概念和使用
    函数式接口概念函数式接口在Java中是指:有且仅有一个抽象方法的接口函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可......
  • Spring Boot调用api patch接口
    SpringBoot调用apipatch接口示例:/***调用apipatch接口**@paramurl*@paramjsonObject*@returnjava.lang.String*@a......
  • Spring Boot调用api delete接口
     SpringBoot调用apidelete接口示例:/***调用apidelete接口**@paramurl*@authorli.zhm*@date2022/8/2014:07*@hist......
  • 使用JS 递归函数 输出 斐波那契数列 (return 返回值使用时的注意点 )
      functionaee(i){  if(i==0){    return0;  }  if(i==1){    return1;  }  if(i>=2){ ***//......
  • Spring Boot调用api post接口
    SpringBoot调用apipost接口示例publicstaticStringsendPost(Stringurl,JSONObjectjsonObject){log.info("请求地址:{}",url);Stringbody......
  • java8中的lambda表达式实用详解
    java8中的lambda表达式实用详解1.lambda简介​ Lambda表达式(lambdaexpression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda......