zoukankan      html  css  js  c++  java
  • Lambda_作为参数和返回值

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

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

    public class RunableImpl {
    
        //Runnable是一个函数式接口
        public static void startThread(Runnable run){
            //Thread实现Runnable接口,启动线程
            new Thread(run).start();
        }
    
        public static void main(String[] args) {
            //给Runnble接口实现一个方法
            startThread(()->System.out.println("线程开始执行任务!"));
        }
    }

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

    public class ComparatorImpl {
        public static Comparator<String> newComparator(){
            /*return new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    //按照字符串降序排序
                    return o2.length()-o2.length();
                }
            };*/
            //方法的返回值类型是一个函数式接口,所以我们可以返回一个Lambda表达式
            /*return (String o1,String o2)->{
                return o2.length()-o2.length();
            };*/
            //继续优化Lambda表达式
            return (o1,o2)->o2.length()-o1.length();
        }
    
        public static void main(String[] args) {
            String[] arr={"a","bb","ccc","dddd"};
            System.out.println("排序之前:"+Arrays.toString(arr));
            Arrays.sort(arr,newComparator());
            System.out.println("排序之后:"+Arrays.toString(arr));
        }
    }

    其中直接return一个Lambda表达式即可。

    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    MVC 与传统的 webform 的比较
    Visual Studio 类模板的修改
    2015-3-3
    SQL SERVER类型与C#类型对照
    数据库连接串的配置
    Could not load file or assembly 'System.Web.Mvc' or one of its dependencies. The located assembly's manifest definition does not
    多条查询sql语句返回多表数据集
    URL和搜索引擎优化
    XPath 语法示例
    如何把数据库的某个字段更新为另一个字段
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11837989.html
Copyright © 2011-2022 走看看