BiFunction功能接口Java示例
在本文中,我们将看到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