BiConsumer功能接口Java示例

时间:2020-01-09 10:35:14  来源:igfitidea点击:

在这篇文章中,我们将看到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