BiConsumer功能接口Java示例
在这篇文章中,我们将看到Java BiConsumer功能接口的示例。
BiConsumer功能接口表示一个接受两个参数且不返回结果的操作。此功能接口中的抽象方法是accept(T t,U u),还有一个默认方法和Then(BiConsumer < super T, super U>之后)。
如果我们要编写需要两个参数且未返回值的Lambda表达式,则可以将该Lambda表达式编写为BiConsumer内置功能接口的实现。
BiConsumer功能接口示例
1.在示例中,创建了一个地图,然后显示该地图的条目。我们将使用实现BiConsumer功能接口的lambda表达式。我们编写的Lambda表达式实现了功能接口的抽象方法,因此在BiConsumer功能接口的情况下,lambda表达式正在实现accept()方法。
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public class BiConsumerExample {
public static void main(String[] args) {
// Implementation
BiConsumer<String, String> biCons = (K, V) ->
System.out.println("Key is- " +K + " Value is- " + V);
Map<String, String> numMap = new HashMap<String, String>();
numMap.put("1", "One");
numMap.put("2", "Two");
numMap.put("3", "Three");
numMap.put("4", "Four");
for(Map.Entry<String, String> entry : numMap.entrySet()) {
// calling accept method
biCons.accept(entry.getKey(), entry.getValue());
}
}
}
输出:
Key is- 1 Value is- One Key is- 2 Value is- Two Key is- 3 Value is- Three Key is- 4 Value is- Four
在程序中,语句BiConsumer <String,String> biCons =(K,V)-> System.out.println(" Key is" + K +" Value is" + V);是BiConsumer作为lambda表达式的实现。由于它是功能接口的实例,因此将其分配给BiConsumer类型的变量。
Lambda支持"目标类型",该目标类型可从使用对象的上下文中推断出对象类型。调用biCons.accept()方法时,Java可以从上下文中推断要在哪里寻找accept()方法的实现。
2.这是另一个示例,其中使用BiConsumer接口实现add()和乘法()方法。
public class BiConsumerExample {
public static void main(String[] args) {
// Implementation as add method
BiConsumer<Integer, Integer> biConsAdd = (a, b) ->
System.out.println("Sum is- " + (a + b));
// Implementation as multiplication method
BiConsumer<Integer, Integer> biConsMul = (a, b) ->
System.out.println("Multiplication is- " + (a * b));
biConsAdd.accept(5, 6);
biConsMul.accept(5, 6);
}
}
输出:
Sum is- 11 Multiplication is- 30
BiConsumer功能接口和Then()方法示例
BiConsumer接口中还有一个默认方法andThen()。
BiConsumer <T,U> andThen(之后的BiConsumer <?
在前面的示例中,对同一组参数依次调用加法和乘法。如果是这种情况,则可以使用andThen()方法。
public class BiConsumerExample {
public static void main(String[] args) {
// Implementation as add method
BiConsumer<Integer, Integer> biConsAdd = (a, b) ->
System.out.println("Sum is- " + (a + b));
// Implementation as multiplication method
BiConsumer<Integer, Integer> biConsMul = (a, b) ->
System.out.println("Multiplication is- " + (a * b));
//First add then multiply in sequence
biConsAdd.andThen(biConsMul).accept(5, 6);
//biConsAdd.accept(5, 6);
//biConsMul.accept(5, 6);
}
}
输出:
Sum is- 11 Multiplication is- 30
JDK中的BiConsumer功能接口
这些内置的功能接口已在JDK本身中广泛使用。 BiConsumer功能接口经常使用的一个示例是使用forEach()方法迭代Map时。在Map界面中,有一个以BiConsumer作为参数的forEach()方法。
forEach(BiConsumer <?super K,?super V>操作)–对映射中的每个条目执行给定的操作,直到所有条目都已处理或者该操作引发异常。
使用forEach()可以更简洁地编写我们迭代Map的第一个示例。
public class BiConsumerExample {
public static void main(String[] args) {
Map<String, String> numMap = new HashMap<String, String>();
numMap.put("1", "One");
numMap.put("2", "Two");
numMap.put("3", "Three");
numMap.put("4", "Four");
numMap.forEach( (K, V) -> System.out.println("Key is- " + K + " Value is- " + V));
}
}
输出:
Key is- 1 Value is- One Key is- 2 Value is- Two Key is- 3 Value is- Three Key is- 4 Value is- Four

