Java8 - 通过实例学习函数接口

121 阅读2分钟

Java8的特点--函数接口实例

java.util.function包有许多预定义的功能接口。这些函数接口可以作为目标分配给lambda表达式或方法/构造器引用。

在对象的迭代过程中,这些接口将非常有用,流API处理和操作,如过滤数据,处理数字数据。

这篇文章介绍了各种数字(Integer, Long, Double相关)功能接口的例子。

ToLongBiFunction接口

这个接口需要两个参数作为输入,产生一个长类型的输出。下面的代码需要两个长的值,使用lambda表达式添加这个值,最后在函数上调用applyAsLong来返回长的结果。

ToLongBiFunction addLongFunction=(value1,value2)-> value1+value2;  
System.out.println(addLongFunction.applyAsLong(50l,40l)); // 90  

ToLongFunction接口

这个函数接受任何值并产生长值。

import java.util.ArrayList;  
import java.util.List;  
import java.util.function.ToLongFunction;  
  
public class MyToLongFunctionExample {  
  
 public static void main(String[] args) {  
  // program example 1  
  List list = new ArrayList();  
  list.add("123");  
  list.add("43");  
  list.add("56");  
  list.add("53");  
  long[] result = list.stream().mapToLong(element -> Long.parseLong(element)).toArray();  
  
  System.out.println(result);  
  // program example 2  
  ToLongFunction longFunction = value -> Long.parseLong(value);  
  System.out.println(longFunction.applyAsLong("123"));  
  
 }  
  
}  

在上面的代码中,提出了两个例子: 第一个例子是将字符串列表转换为长字符串 使用流接口创建一个字符串列表,用mapToLong方法遍历每个元素 mapToLong(ToLongFunction f)使用ToLongFunction间接使用lambda表达式。
下一个例子使用ToLongFunction将字符串数据转换为long对象。

ToDoubleFunction接口

这是一个用于从对象中产生双倍值的函数表示:

import java.util.function.ToDoubleFunction;  
public class MyToDoubleFunctionExample {  
  
 public static void main(String[] args) {  
  
  ToDoubleFunction doubleFunction = value -> Double.parseDouble(value);  
  System.out.println(doubleFunction.applyAsDouble("54")); // output 54  
  
 }  
  
}  

ToDoubleBiFunction接口

这个函数需要两个参数作为输入,产生双倍值。下面的代码需要两个整数值,使用lambda表达式添加这些值并分配给函数接口,最后在函数上调用applyAsDouble来返回双倍结果。

ToDoubleBiFunction addDoubleFunction=(value1,value2)-> value1+value2;  
System.out.println(addDoubleFunction.applyAsDouble(5,4)); //outputs 9  

ToIntFunction 示例

取一个对象数据并产生整数值。这是一个使用ToInitFunction接口和lambda表达式将一个字符串转换为Integer的例子

ToIntFunction intFunction=value-> Integer.parseInt(value);  
System.out.println(intFunction.applyAsInt("5")); // output 5  

ToIntBiFunctioninterface

这个接口接受两个参数并产生一个整数结果

ToIntBiFunction addIntFunction=(value1,value2)-> value1+value2;  
System.out.println(addIntFunction.applyAsInt(15,14)); //outputs 29  

DoubleToLongFunction

这个接口接收双倍数的值,并产生长值的结果

  
DoubleToLongFunction function = value-> new Double(value).longValue();  
System.out.println(function.applyAsLong(43.7)); //outputs 43  

IntFunction示例

这个接口接收整数值作为参数,并产生给定数据类型的结果:

 IntFunction function= value-> String.valueOf(value);  
        System.out.println(function.apply(43)); // outputs "43"  
        System.out.println(function.apply(43).length()); // outputs 2

IntToLongFunction接口

这个接口接收一个整数作为输入,并产生Long值

IntToLongFunction fucntion= (value) -> Long.valueOf(value);  
System.out.println(fucntion.applyAsLong(21));  

LongFunction接口

这个接口接受长值作为参数,并产生给定数据类型的结果:

  
LongFunction longFunction= value-> String.valueOf(value);  
System.out.println(longFunction.apply(512l)); // outputs "512"  
System.out.println(longFunction.apply(513l).length()); // outputs 3  

LongToDoubleFunction接口

该接口接受长值作为输入,产生双倍值作为输出

LongToDoubleFunction longTDoubleFunction= (value) -> Double.valueOf(value);  
System.out.println(longTDoubleFunction.applyAsDouble(21l)); //outputs 21.0  

LongToIntFunction接口

该接口接受长值并输出int值

LongToIntFunction longToIntFunction = value-> (int)(value);  
System.out.println(longToIntFunction.applyAsInt(20143)); // outputs 20143