您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java基础 Lambda作为方法的返回值

java持续实践 发布时间:2018-10-01 12:08:29 ,浏览量:2

  • 开发环境 jdk1.8

传统的使用Comparator来进行排序, 从大到小的输出的写法如下, 需要使用 new Comparator来创建一个匿名的内部类来进行比较. 由于是从大到小降序,所以用o2-o1

public static void main(String[] args) {
        String[] array = {"abc", "jk", "aghjghj", "u"};

        System.out.println(Arrays.toString(array));
        // 进行一次排序  按照 长度 由 大 到 小 排序
        Arrays.sort(array, new Comparator() {
            @Override
            public int compare(String o1, String o2) {
                return o2.length() - o1.length();
            }
        });
        System.out.println(Arrays.toString(array));
    }

使用Lambda后,可以直接在 Arrays.sort方法里面,传递一个Comparator接口的实现类,该实现类就是Lambda的返回值. 代码如下

public class Demo02Comparator {
    // 函数式接口 作为返回值类型  返回的是 其实例 实现类对象
    private static Comparator newComparator() {
        //return 要的是函数式接口的实例
        return (String a, String b)->{
            return b.length()-a.length();
        };
    }

    public static void main(String[] yu) {
        String[] array={"abc", "jk", "aghjghj", "u"};
        System.out.println(Arrays.toString(array));
        //排序,长度由大到小输出
        Arrays.sort(array, newComparator());
        System.out.println(Arrays.toString(array));
    }
}

控制台打印如下 其中newComparator方法可以简化如下 参数a,b去掉了String,原因是lambda的可推导即可省略特性

 private static Comparator newComparator() {
        //return 要的是函数式接口的实例
        return (a, b)-> b.length()-a.length();
    }

省略写法的规则为: 1. 小括号内参数的类型可以省略; 2. 如果小括号内有且仅有一个参,则小括号可以省略; 3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。

因此如果一个方法的返回值类型是一个函数式接口,那么就可以直接返回一个Lambda表达式。

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0426s