java Lambda表达式详细介绍

KLQ 2020-09-07 15:40:58 java常见问答 4574

Lambda 表达式是一个匿名函数,基于数学中的λ演算得名,也可称为闭包,下面的话就来通文章内容对它再进行一个详细的了解吧。

Lambda表达式是推动Java 8发布的重要新特性,它允许把函数作为一个方法的参数。

下面的话就通过代码来进一步的了解它吧。

先定义一个计算数值接口,代码:

// 可计算接口
public interface Calculable
{
    // 计算两个int数值
    int calculateInt(int a, int b);
}

Calculable接口只有一个方法calculateInt,参数是两个int类型,返回值也是int类型,代码:

public class Test
{
    /**
     * 通过操作符,进行计算
     *
     * @param opr 操作符
     * @return 实现Calculable接口对象
     */
    public static Calculable calculate(char opr)
    {
        Calculable result;
        if (opr == '+')
        {
            // 匿名内部类实现Calculable接口
            result = new Calculable()
            {
                // 实现加法运算
                @Override
                public int calculateInt(int a, int b)
                {
                    return a + b;
                }
            };
        }
        else
        {
            // 匿名内部类实现Calculable接口
            result = new Calculable()
            {
                // 实现减法运算
                @Override
                public int calculateInt(int a, int b)
                {
                    return a - b;
                }
            };
        }
        return result;
    }
}

方法calculate当中opr参数是运算符,返回值是实现Calculable接口对象,代码第13行和第,23行都采用匿名内部类实现Calculable接口,代码第16行实现加法运算,代码第26行实现减法运算。

public static void main(String[] args)
{
    int n1 = 10;
    int n2 = 5;
    // 实现加法计算Calculable对象
    Calculable f1 = calculate('+');
    // 实现减法计算Calculable对象
    Calculable f2 = calculate('-');
    // 调用calculateInt方法进行加法计算
    System.out.println(n1 + "+" + n2 + "=" + f1.calculateInt(n1, n2));
    // System.out.printf("%d + %d = %d \n", n1, n2, f1.calculateInt(n1, n2));
    // 调用calculateInt方法进行减法计算
    System.out.println(n1 + "-" + n2 + "=" + f1.calculateInt(n1, n2));
    // System.out.printf("%d - %d = %d \n", n1, n2, f2.calculateInt(n1, n2));
}

代码第5行当中,f1是实现加法计算Calculable对象,代码第7行当中,f2是实现减法计算Calculable对象,代码第9行和第12行才进行方法调用。

上面的代码当中,列除了2种输出方式,下面的话,就来简单的介绍一下Java当中,比较常见的输出函数:

常见的输出函数

输出结果:

10+5=15
10-5=15

示例:

使用匿名内部类的方法calculate代码很臃肿,Java 8采用Lambda表达式能够替代匿名内部类。修改之后的通用方法calculate代码:

/**
 * 通过操作符,进行计算
 * @param opr 操作符
 * @return 实现Calculable接口对象
 */
public static Calculable calculate(char opr)
{
    Calculable result;
    if (opr == '+')
    {
        // Lambda表达式实现Calculable接口
        result = (int a, int b) - >
        {
            return a + b;
        };
    }
    else
    {
        // Lambda表达式实现Calculable接口
        result = (int a, int b) - >
        {
            return a - b;
        };
    }
    return result;
}

代码第10行和第15行用Lambda表达式替代匿名内部类,可以看出,代码变得简洁,通过以上示例我们发现,Lambda表达式是一个匿名函数(方法)代码块,可以作为表达式、方法参数和方法返回值。

Lambda表达式标准语法形式:

(参数列表) -> {
    // Lambda表达式体
}

Lambda表达式标准语法形式

java Lambda表达式就给你介绍到这里啦,请多多的关注奇Q工具网吧,更多java入门知识,可以为你分享呢。

推荐阅读:

java使用Lambda表达式遍历Iterator迭代器详解

java使用Lambda表达式遍历Collection集合详解

java8 Effectively final详细介绍