两句话解决JAVA Lambda表达式

本文通过对比传统匿名内部类与Lambda表达式的实现方式,介绍了Lambda表达式如何简化Java代码并快速实现接口中的抽象方法。展示了使用Lambda表达式前后的代码差异,并强调了接口中只能有一个抽象方法的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两句话解决JAVA Lambda表达式

使用函数式编程简化代码,将接口中的抽象方法快速实现。

这是自己学的内容,总结下(心虚中……)
忽略掉使用函数式编程,则两句话是:简化代码,将接口中的抽象方法快速实现。

先看一段完整JAVA语法实现接口的实现代码:

public class LambdaNot {
    public static void main(String[] args){
        // B. 这里使用匿名类实现接口,并继承接口中的方法
        ILambda iLambda = new ILambda() {
            @Override
            public Integer add(Integer x, Integer y) {
                return x+y;
            }
        };
        // C. 实现类调用实现的方法
        System.out.print(iLambda.add(23,23));
    }
}
// A. 定义一个接口,包含一个抽象方法,想要实现类去实现两个整数的加法
interface ILambda{
    public Integer add(Integer x, Integer y);
}

使用Lambda改写上面的代码:

public class Lambda {
    public static void main(String[] args){
        // B. 使用Lambda表达式实现上面代码:使用匿名类实现接口 的代码
        IMath imath = (x, y)-> x+y;

        //C. 实现类调用实现的方法
        Integer result = imath.add(12,45);
        System.out.print(result);
    }
}
// A. 同样,定义一个接口,包含一个抽象方法,想要实现类去实现两个整数的加法
interface IMath{
    public Integer add(int x, int y);
    //public void canI();
}

Lambda表达式是使用了函数式编程思想。函数式编程中,接口的抽象方法只能有一个,如果将IMath接口中的canI方法取消掉注释,则Lambda表达式会报错,它不知道是去自动匹配add方法还是canI方法。所以,接口可以添加一个@FunctionalInterface注解,代码则变成:

@FunctionalInterface
interface IMath{
    public Integer add(int x, int y);
}

附上一张图,解释下Lambda简化了哪些代码:
这里写图片描述

Lambda表达式语法:

(parameters) -> expression
或
(parameters) ->{ statements; }

如果只有一句表达式则可以不需要用大括号,多条语句的话则需要使用大括号。

以下是lambda表达式的重要特征:(摘录自菜鸟教程

可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
DONE.

### 编写 Lambda 表达式的示例与语法 Lambda 表达式允许开发者以更简洁的方式编写匿名函数。其基本结构由三部分构成:参数列表、箭头符号 `->` 和表达式体。 #### 基本语法 ```java (parameters) -> expression ``` 对于较为复杂的逻辑,则可以采用带有大括号的形式,并且可以在其中加入多条语句以及返回关键字: ```java (parameters) -> { // 多行代码 return someValue; } ``` #### 参数处理 当只有一个参数时,圆括号是可以省略的;如果表达式体内只有一句话,花括号也可以被忽略不计[^2]。 #### 实际应用案例 下面给出几个具体的例子来说明如何创建并使用 lambda 表达式: 1. **无参情况** 定义一个没有输入参数却能执行特定操作的任务。 ```java Runnable task = () -> System.out.println("Hello from a lambda!"); ``` 2. **单个参数的情况** 接受单一整数类型的参数,并对其进行平方运算。 ```java Function<Integer, Integer> squareFunction = x -> x * x; int result = squareFunction.apply(5); // 结果为 25 ``` 3. **多个参数的例子** 对两个字符串连接起来形成一个新的字符串实例。 ```java BiFunction<String, String, String> concatFunction = (a, b) -> a + " and " + b; String combinedString = concatFunction.apply("Java", "Python"); // 输出:"Java and Python" ``` 4. **带有多条语句的情形** 当需要在一个 lambda 内部完成一系列动作时,应该将其包裹于一对 `{}` 中间。 ```java Predicate<List<?>> isListEmptyOrContainsNulls = list -> { boolean containsNullElements = false; if (!list.isEmpty()) { for (Object element : list) { if (element == null) { containsNullElements = true; break; } } } else { containsNullElements = true; } return containsNullElements || list.isEmpty(); }; ``` 以上就是关于如何在编程实践中编写 lambda 表达式的介绍[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值