JAVA Lambda

写一个屏幕打印字符的Demo:

public class Lambda {
    interface Printer{
        void printer(String str);
    }
    public void printSth(String sth, Printer printer){
        printer.printer(sth);
    }

    public static void main(String[]  args){
        Lambda lambda = new Lambda();
        String sth = "These words will be printed on the screen";

        /*--------常规写法---------*/
        Printer printer = new Printer() {
            @Override
            public void printer(String str) {
                System.out.println(str);
            }
        };
        lambda.printSth(sth, printer);

        /*----Lambda-------*/
        /*
         * 根据以上常规写法,对比Lambda写法,得出:
         * 1. 接口实现的时候,覆盖方法直接写成匿名方法,写在赋值符号右边
         * 2. 匿名方法的形参要和覆盖的方法一致
         * 3. 实现的方法体通过箭头符号和大括号表明
         * 4. 实现类中,去掉了覆盖方法的@Override注释以及权限标识
        **/

        Printer printer1 = (String str)->{
            System.out.println(str);
        };
        lambda.printSth(sth, printer1);

        /*-----Lambda 简化写法1-----------*/
        /*
         * 去掉匿名方法形参的参数类型
         * Lambda 会自动匹配参数类型
        **/
        Printer printer2 = (str)->{
            System.out.println(str);
        };
        lambda.printSth(sth, printer2);

        /*-----Lambda 简化写法2-----------*/
        /*
         * 如果匿名方法体只有一行,可以省略大括号
         **/
        Printer printer3 = str -> System.out.println(str);
        lambda.printSth(sth, printer3);

        /*-----Lambda 简化写法3-----------*/
        /*
         * 表达式直接作为参数
         * Lambda 的参数以及返回值都可以省略
         * 更据接口的定义,选择不同的写法
         **/
        lambda.printSth(sth, str -> System.out.println(str));

        /*
         * 如果接口方法没有参数,匿名参数列表的小括号不能省略,写法如下:
         * () -> System.out,print();
        **/
    }
}

实在记不住,按照上面的demo依葫芦画瓢。一个接口,接口有个未实现的方法。

下面给出一个处理流的应用

import static java.util.stream.Collectors.toList;
List names = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur");
        List list = names.stream() //将数组转化为流
                .filter(s->s.startsWith("L")) //筛选出L开头的字母
                .map(String::toUpperCase) // 将字符串转化为大写
                .sorted() //按照字母自然顺序排序
                .collect(toList()); //转化为数组
        System.out.println(list); // [LEMUR, LION]

你可能感兴趣的:(JAVA Lambda)