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