Java forEach 改变多个属性时的Lambda写法

博客介绍了Lambda表达式的两种写法,第一种用于改变一个属性时,第二种用于改变多个属性且一个入参时括号可省略。

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

  • 第一种写法(改变一个属性时):
fees.forEach(fee -> fee.setCheckInDate(perCheckIn));
  • 第二种写法(改变多个属性时,一个入参时括号可以省略):
fees.forEach((fee) -> {
    fee.setCheckInDate(perCheckIn);
    fee.setAmount(fee.getLocalAmount().multiply(financeRate).setScale(2, BigDecimal.ROUND_HALF_UP));
});
### Java Lambda 表达式概述 Lambda 表达式是在 Java 8 中引入的一项重要特性,它允许开发者以更简洁的方式编写匿名函数。通过使用 Lambda 表达式,可以减少冗余代码并提高程序可读性。以下是关于 Lambda 表达式的详细介绍以及其常见用途。 #### 基本语法 Lambda 表达式的基本结构由三部分组成:参数列表、箭头符号 `->` 和表达式体。下面是一个简单的例子[^3]: ```java // 定义接口 interface Greeting { void perform(); } public class Main { public static void main(String[] args) { // 使用 Lambda 表达式实现接口方法 Greeting greeting = () -> System.out.println("Hello, world!"); greeting.perform(); // 输出 Hello, world! } } ``` 上述代码展示了如何利用 Lambda 表达式来替代传统的匿名内部类写法。这种方式不仅更加紧凑,还增强了代码的灵活性。 #### 函数式接口 为了支持 Lambda 表达式,Java 提供了一种特殊类型的接口——函数式接口(Functional Interface)。这种接口只包含一个抽象方法,并可以通过 Lambda 表达式实例化。常见的内置函数式接口有 `Runnable`, `Callable<V>`, `Comparator<T>` 等[^4]。 例如,在多线程编程中可以用如下方式简化线程创建过程: ```java new Thread(() -> { System.out.println("Thread using lambda"); }).start(); ``` 此片段中的 Lambda 表达式实现了 `Runnable` 接口的单个方法 `run()`。 #### 方法引用 当某些情况下只需要调用已存在的方法而无需额外逻辑处理,可以采用方法引用来代替完整的 Lambda 表达式定义。这进一步提升了编码效率。例如: ```java List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.forEach(System.out::println); // 使用方法引用打印列表项 ``` 这里 `System.out::println` 是标准库中预定义的方法引用形式之一[^5]。 #### 解决问题案例 假设我们需要过滤掉集合里所有长度小于等于三个字符的名字,则可以借助 Stream API 结合 Lambda 来完成操作: ```java import java.util.*; import java.util.stream.Collectors; public class FilterExample { public static void main(String[] args) { List<String> originalNames = Arrays.asList("Tom","Jerry","Spike","Tyke"); List<String> filteredNames = originalNames.stream() .filter(name -> name.length() > 3) // 应用 Lambda 进行条件筛选 .collect(Collectors.toList()); System.out.println(filteredNames); } } ``` 在这个例子中,我们运用了 Streams 的 filter 功能配合自定义判断准则完成了数据清洗工作[^6]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值