Consumer<T> 是 Java 8 中的一个预定义函数式接口,用于表示接受一个输入参数 T 并执行某些操作但没有返回值的操作。
Consumer<T> 接口中定义了一个抽象方法 void accept(T t),该方法接受一个参数 t,表示要执行的操作。你可以使用 accept() 方法来定义具体的操作逻辑。
以下是使用 Consumer<T> 接口的示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
public class ConsumerExample {
public static void main(String[] args) {
// 定义一个字符串列表
List<String> fruits = Arrays.asList("Apple", "Orange", "Banana", "Mango");
// 使用 Consumer 接口实现遍历输出每个水果的操作
Consumer<String> printFruit = fruit -> System.out.println(fruit);
fruits.forEach(printFruit);
// 可简化为以下形式
fruits.forEach(System.out::println);
}
}
打印结果:
Apple
Orange
Banana
Mango
在上面的示例中,我们首先创建了一个字符串列表 fruits,然后创建了一个 Consumer<String> 对象 printFruit,通过 lambda 表达式实现了 accept() 方法的具体操作,即打印每个水果的名称。
使用 forEach() 方法结合 Consumer 接口,可以简洁地遍历列表并执行指定的操作。
下边是 forEach() 方法的源码:
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
在 forEach 方法的实现中,首先检查传入的 action 是否为 null,如果为 null,则会抛出 NullPointerException。然后,它使用增强的 for 循环遍历 this(即当前 Iterable 对象),对每个元素执行 action.accept(t),其中 t 是当前元素。
使用 Consumer 修改对象的多个属性
示例代码:
import java.util.function.Consumer;
class Product {
private String name;
private double price;
private int quantity;
public Product() {
// 默认构造函数
}
public Product(String name, double price, int quantity) {
this.name = name;
this.price = price;
this.quantity = quantity;
}
// Getter 和 Setter 方法省略
public void update(Consumer<Product> updater) {
updater.accept(this);
}
}
public class Main {
public static void main(String[] args) {
Product product = new Product();
System.out.println("初始状态:");
printProductDetails(product);
product.update(p -> {
p.setName("New Product");
p.setPrice(29.99);
p.setQuantity(10);
});
System.out.println("修改后的状态:");
printProductDetails(product);
}
public static void printProductDetails(Product product) {
System.out.println("名称:" + product.getName());
System.out.println("价格:" + product.getPrice());
System.out.println("数量:" + product.getQuantity());
System.out.println();
}
}
在这个示例中,我们定义了一个 Product 类,其中包含了三个属性:name、price 和 quantity。该类提供了默认的构造函数以及带参数的构造函数、Getter 和 Setter 方法。
在 Product 类中,我们还定义了一个名为 update 的方法,接受一个 Consumer<Product> 对象作为参数。在该方法中,我们调用 accept 方法将当前对象传递给 Consumer 对象,从而实现对对象属性的修改。
在 Main 类的 main 方法中,我们创建一个 Product 对象,并打印出初始状态。然后,我们使用 product.update 方法传递一个 Consumer 对象来修改对象的属性值。最后,我们再次打印出修改后的状态,以验证修改结果。
运行上述代码,输出将会是:
初始状态:
名称:null
价格:0.0
数量:0
修改后的状态:
名称:New Product
价格:29.99
数量:10
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。