java 箭头函数

场景一

IntStream.range(0, data.size()).forEach(i -> {
..... 省略
});

场景二

list.stream().forEach(e -> {
..... 省略
});
### Java箭头函数(Lambda 表达式)的使用方法 Java 8 引入了 Lambda 表达式,这是一种简化代码编写的方式,尤其适用于函数式接口(即只定义了一个抽象方法的接口)。以下是关于如何在不同场景下使用 Lambda 表达式的详细介绍。 #### 基本语法 Lambda 表达式的基本结构为 `(parameters) -> { body }`。它允许开发者以简洁的形式替代传统的匿名内部类实现方式[^1]。 ```java // 传统匿名类写法 show.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Event handling without lambda expression is boring"); } }); // 使用 Lambda 表达式后的写法 show.addActionListener(e -> { System.out.println("Light, Camera, Action !! Lambda expressions Rocks"); }); ``` 上述例子展示了如何利用 Lambda 表达式替换冗长的传统事件监听器代码。这种新形式不仅减少了样板代码的数量,还提高了可读性和维护性。 #### 方法引用 除了直接书写完整的 Lambda 表达式外,在某些情况下还可以进一步优化代码风格——通过 **方法引用** 来代替简单的 Lambda 实现。方法引用由 `::` 双冒号操作符表示[^2]: ```java List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); // 使用 Lambda 表达式遍历集合中的元素并打印它们的名字 names.forEach(name -> System.out.println(name)); // 使用方法引用来达到相同效果 names.forEach(System.out::println); ``` 这里可以看到当 Lambda 的主体仅仅是调用某个已存在的方法时,则可以直接改用更加清晰明了的方法引用形式。 #### 关于 this 指向问题 需要注意的是,在 JavaScript 等其他支持 Arrow Function 的语言里,“this”的指向可能会因为上下文而改变;但在 Java 中不存在这样的情况,Lambda 表达式内的变量作用范围严格遵循局部变量捕获规则,并不会重新绑定 “this” 或者父级对象实例[^3]。 #### 结合 Stream API 进行数据处理 另一个非常重要的应用领域就是配合 Streams API 对集合类型的数据源执行各种转换操作。下面给出一个具体案例说明其强大之处[^4]: ```java import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args){ List<String> languages = Arrays.asList("Java","JavaScript","Python","Ruby"); // 找到所有名字首字母为 'J' 的编程语言并逐一显示出来 long count = languages.stream() .filter(lang->lang.startsWith("J")) .peek(System.out::println) .mapToInt(String::length) .sum(); System.out.printf("Total characters of filtered items:%d%n",count); } } ``` 此程序片段首先创建了一个包含多种编程语言名称字符串列表的对象 references 。之后借助 stream 流机制完成了一系列链式调用:先筛选符合条件项、再逐条输出中间结果的同时计算各自长度之和最终得出总计数值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值