BiFunction功能接口Java示例

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

在本文中,我们将看到java.util.function.BiFunction函数接口的示例。

BiFunction功能接口表示一个接受两个参数并产生结果的操作。该功能接口中的抽象方法是

R apply(T t,U u)–其中t是第一个参数,u是第二个函数参数,R表示返回结果的类型。

如果编写的Lambda表达式需要两个相同或者不同类型的参数并返回另一个类型的值,则可以将该Lambda表达式编写为BiFunction内置功能接口的实现。

除了apply()抽象方法外,Function()接口具有以下默认接口方法。

andThen(Function <?super R ,?在之后扩展V>)–以另一个Function为参数,并返回一个组合的BiFunction,该BiFunction依次执行首先调用BiFunction的操作,然后执行after操作。

BiFunction接口apply()方法示例

1.编写一个函数,该函数接受两个String作为参数,并返回串联的String作为结果。

import java.util.function.BiFunction;

public class BiFunctionExample {
	public static void main(String[] args) {
		BiFunction<String, String, String> ref = (str1, str2) -> str1+ " " +str2;
		System.out.println("Concatenated Strings- " + ref.apply("Hello", "Lambda"));
	}
}

输出:

Concatenated Strings- Hello Lambda

2.编写一个函数,该函数使用两个Integer(i1,i2)作为参数,并向幂i2返回一个为i1的双精度值。

public class BiFunctionExample {
	public static void main(String[] args) {
		BiFunction<Integer, Integer, Double> biFunction = (i1, i2) -> Math.pow(i1, i2);
		System.out.println("Result- " + biFunction.apply(3, 4));
	}
}

输出:

Result- 81.0

BiFunction功能接口和Then()方法示例

在示例中,BiFunction上将有一个BiFunction接口和一个Function接口,然后以Function为参数调用Then()。在BiFunction上调用apply()方法时,它将首先执行BiFunction实现,然后执行Function实现。

public class BiFunctionExample {
	public static void main(String[] args) {
		BiFunction<Integer, Integer, Integer> biFunction = (a, b) -> a + b;
		Function<Integer, Integer> function = (a) -> a * a;
		// Sequence First BiFunction then Function
		System.out.println("Result- " + biFunction.andThen(function).apply(3, 5));
	}
}

输出:

Result- 64

JDK中的BiFunction功能接口

这些内置的功能接口已在JDK本身中广泛使用。在Map接口compute中,在Java8中添加了computeIfPresent,computeIfPresent方法,而这些方法compute和computeIfPresent以BiFunction为参数。

computeIfPresent(K键,BiFunction <?超级K ,?超级V ,?扩展V> remappingFunction)–如果存在指定键的值且该值不为空,则尝试计算给定键及其当前映射值的新映射。

ComputeIfPresent示例

public class BiFunctionExample {
  public static void main(String[] args) {
      Map<String, Integer> numMap = new HashMap<String, Integer>();
      numMap.put("A", 1);
      numMap.put("B", 3);
      numMap.put("C", 8);
      numMap.put("D", 5);
      System.out.println("------- Before Computation -------");
      numMap.forEach((key, val)-> System.out.println("Key- " +key + "Val- " + val));
      numMap.computeIfPresent("B", (key, val)-> val + 1);
      System.out.println("------- After Computation -------");
      numMap.forEach((key, val)-> System.out.println("Key- " +key + "Val- " + val));
  }
}

输出:

------- Before Computation ------
Key- AVal- 1
Key- BVal- 3
Key- CVal- 8
Key- DVal- 5
------- After Computation ------
Key- AVal- 1
Key- BVal- 4
Key- CVal- 8
Key- DVal- 5