Java8 新增的Lambda表达式

引入

使用匿名内部类(匿名内部类可参考:Java中的匿名内部类

interface Command
{
    void process(int[] target);
}
class ProcessArray
{
    public  void process(int [] target, Command cmd)
    {
        cmd.process(target);
    }
}
public class CommandTest
{
    public static void main(String[] args)
    {
        ProcessArray pa = new ProcessArray();
        int[] arr = {1,2,3,4};
        //使用匿名内部类
        pa.process(arr, new Command(){
                public void process(int[] arr)
                {
                    int sum =0;
                    for(int k : arr)
                        sum += k;
                    System.out.println(sum);
                }
            }
        );
    }
}
View Code

使用Lambda表达式,可以简化匿名内部类。(部分可以用Lambda表达式代替)

interface Command
{
    void process(int[] target);
}
class ProcessArray
{
    public  void process(int [] target, Command cmd)
    {
        cmd.process(target);
    }
}

//Java8 新增了Lambda表达式,Lambda表达式完全可用于简化匿名内部类对象
public class CommandTest
{
    public static void main(String[] args)
    {
        ProcessArray pa = new ProcessArray();
        int[] arr = {1,2,3,4};
        //使用Lambda表达式
        pa.process(arr, (int[] arr1)->    //不能重复arr,错误: 已在方法 main(String[])中定义了变量 arr
                {
                    int sum =0;
                    for(int k : arr1)
                        sum += k;
                    System.out.println(sum);
                }
        );
    }
}
View Code

Lambda的语法

1. 参数列表。参数列表允许省略形参类型;若只有一个形参,甚至可省略参数列表的圆括号
2. 箭头 ->
3. 代码块。若只有一句,可省略{};

Lambda表达式是有类型的,称为“目标类型(target type)”,它必须是函数式接口(functional interface)。
函数式接口是只包含一个抽象方法的接口。函数式接口可以包含多个默认方法、类方法,但只能有一个抽象方法。
Java8 提供了 @FunctionalInterface 注解,用于编译器检查接口是函数式接口,放在接口定义的前面。

    public static void main(String[] args)
    {
        //Lambda表达式的返回就是函数式接口的对象
        // Runnable 是Java中提供的一个接口,只有一个匿名方法 void run()
        Runnable r = () -> {
            int sum = 0;
            for(int i=0; i<=100; ++i)
                sum += i;
            System.out.println(sum);
        };
        r.run();
    }

*******************

常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
原文地址:https://www.cnblogs.com/htj10/p/12366065.html