Java 8现在具有函数式接口,例如ToLongFunction,它将其参数转换为长整型数值。
我看到了一个示例,代码如下:
ToLongFunction<String> i = (x)-> Long.parseLong(x);
System.out.println(i.applyAsLong("2"));
问题是:为什么要实现一个接口来将变量转换为原始的long类型,而更简单和易读的方法不是直接调用Long.parseLong(x)方法呢?
Long.parseLong()
而不是显式地声明ToLongFunction
类型的变量(例如上面的i
)。ToLongFunction
类型的显示变量,而是在编写使用它们的许多函数之一的lambda时间接使用函数式接口作为目标。Stream
界面为例,您可能希望获取一个包含数字值的String
对象列表(例如["123", "456", ...]
),并将其全部解析为一个long
类型的列表。long[] result = input.stream().mapToLong( x -> Long.parseLong(x) ).toArray();
ToLongFunction
,而是通过向 mapToLong(ToLongFunction f)
提供一个 lambda 方法来间接使用它,这个方法调用了你的 Long.parseLong(x)
方法。所以函数式接口是帮助实现这一点的关键。
ToLongFunction
。 - Carcigenicate