BiConsumer<R, T> 是一个函数式接口,它接受两个参数并且没有返回值。其中,R 和 T 是参数的类型。


要使用 BiConsumer<R, T> 接口,可以按照以下步骤进行:

1. 创建一个 BiConsumer<R, T> 的实例。

BiConsumer<String, Integer> biConsumer = (str, num) -> {
    // 在这里执行操作
};

2. 使用 accept() 方法来接受两个参数并执行操作。

String str = "Hello";
int num = 5;

biConsumer.accept(str, num);

在上面的示例中,我们创建了一个 BiConsumer<String, Integer> 的实例 biConsumer,它接受一个字符串和一个整数作为参数。然后,我们定义了在接受参数后执行的操作(在注释处)。最后,我们分别传递一个字符串 "Hello" 和整数 5 给 biConsumeraccept() 方法进行操作。

请根据自己的具体需求替换 String 和 Integer 的类型,并在 accept() 方法中编写希望执行的操作。



下面是一个完整的示例代码,演示了如何使用 BiConsumer<R, T> 接口:

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

public class BiConsumerExample {
    public static void main(String[] args) {
        // 创建一个 Map 对象
        Map<String, Integer> numberMap = new HashMap<>();
        numberMap.put("One", 1);
        numberMap.put("Two", 2);
        numberMap.put("Three", 3);

        // 使用 BiConsumer 接口实现遍历输出每个键值对的操作
        BiConsumer<String, Integer> printEntry = (key, value) -> {
            System.out.println("Key: " + key + ", Value: " + value);
        };

        // 遍历 Map 中的每个键值对,并执行 printEntry 的 accept() 方法
        numberMap.forEach(printEntry);
    }
}

打印结果:

Key: One, Value: 1
Key: Two, Value: 2
Key: Three, Value: 3

在上述示例中,我们创建了一个 Map 对象 numberMap,其中包含了若干个键值对。然后,我们定义了一个 BiConsumer<String, Integer> 对象 printEntry,用于打印每个键值对的信息。

最后,我们使用 forEach() 方法遍历 numberMap 中的每个键值对,并调用 printEntry 的 accept() 方法,将键和值作为参数传递给它,从而执行打印操作。

下边是 forEach() 方法的实现源码:

default void forEach(BiConsumer<? super K, ? super V> action) {
    Objects.requireNonNull(action);
    for (Map.Entry<K, V> entry : entrySet()) {
        K k;
        V v;
        try {
            k = entry.getKey();
            v = entry.getValue();
        } catch(IllegalStateException ise) {
            // this usually means the entry is no longer in the map.
            throw new ConcurrentModificationException(ise);
        }
        action.accept(k, v);
    }
}

forEach 方法的实现中,首先检查传入的 action 是否为 null ,如果为 null ,则会抛出 NullPointerException 。然后,使用增强的 for 循环遍历 entrySet() ,即遍历 Map 中的每个键值对。对于每个键值对,通过 entry.getKey()entry.getValue() 方法获取键和值,并将它们传递给 action.accept(k, v) 进行处理。


今夜有点儿凉
40 声望3 粉丝

今夜有点儿凉,乌云遮住了月亮。