函数式接口仅包含一个未实现方法,抽象特定功能。consumer 函数式接口接受一个参数但不返回任何值。我们可以使用 lambda 表达式和 consumer 函数式接口来简化匿名函数编写。在实战中,consumer 可用于执行操作,例如将商品添加到数据库或计算购物车总价。

Java 函数式接口与 Consumer 函数式接口
函数式接口
函数式接口是仅包含一个未实现方法的接口。这意味着该接口可以看作是对具有特定功能的函数的抽象。
立即学习“Java免费学习笔记(深入)”;
Consumer 函数式接口
Consumer 函数式接口是 Java 中最常用的函数式接口之一,它接受一个参数但不返回任何值。声明如下:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}使用 Consumer 函数式接口
我们可以通过 Java Lambda 表达式使用 Consumer 函数式接口。Lambda 表达式允许我们以简明的方式编写匿名函数。
以下示例展示了如何使用 Consumer 来处理字符串列表:
List<String> names = List.of("John", "Jane", "Bob", "Alice");
// 创建一个 Consumer 来打印每个名称
Consumer<String> printName = name -> System.out.println(name);
// 对列表中的每个元素应用 Consumer
names.forEach(printName);这段代码会打印列表中每个名称,如下所示:
John Jane Bob Alice
实战案例
考虑一个在线购物应用程序,其中有购物车类。购物车包含一个列表,其中存储着要购买的商品。我们可以使用 Consumer 来执行一些操作,例如:
- 将每个商品添加到数据库
- 计算购物车的总价
- 将购物车内容打印到控制台
以下示例展示了如何使用 Consumer 实现第一个需求:
class Item {
private String name;
private int quantity;
}
class ShoppingCart {
private List<Item> items;
public void addItem(Item item) {
items.add(item);
}
public void addToDatabase(Consumer<Item> consumer) {
for (Item item : items) {
consumer.accept(item);
}
}
}
// 在数据库中保存商品
Consumer<Item> saveItem = item -> {
// 与数据库交互逻辑
};
// 创建一个购物车并添加商品
ShoppingCart cart = new ShoppingCart();
cart.addItem(new Item("Apple", 2));
cart.addItem(new Item("Banana", 5));
// 将购物车商品添加到数据库
cart.addToDatabase(saveItem);

















