Java 8 ToLongFunction何时应该使用它?

Gab*_*iel 4 java java-8

Java 8现在具有功能接口,例如ToLongFunction,它将其参数转换为long值.

我看到一个例子如下面的代码:

ToLongFunction<String> i  = (x)-> Long.parseLong(x);

System.out.println(i.applyAsLong("2"));
Run Code Online (Sandbox Code Playgroud)

问题是:为什么我要实现一个接口只是为了将一个变量转换为一个基元long,只需要调用方法Long.parseLong(x)就更简单易读了?

Bee*_*ope 6

简短的回答是你根本不会这样做,你只是Long.parseLong()直接打电话.

更长的答案是你很少ToLongFunctioni上面那样显式地声明类型的显式变量,而是在为接受它们的众多函数之一编写lambda时间接使用函数接口作为目标.

要使用新Stream接口中的示例,您可能需要获取具有如下数值List<String> inputString对象:["123", "456", ...]并将它们全部解析为列表long.

你可以这样做:

long[] result = input.stream().mapToLong( x -> Long.parseLong(x) ).toArray(); 
Run Code Online (Sandbox Code Playgroud)

在这里你永远不会ToLongFunction直接写,但通过提供lambda方法间接使用它mapToLong(ToLongFunction f),它调用你的Long.parseLong(x)方法.因此,功能界面是帮助实现这一功能的神奇之处.

因此,您将始终间接使用此接口Stream以及Java 8中的其他lambda相关功能,但您可能不会经常显式地使用它(除非您正在编写想要接受此类函数的类).

  • 在第一句中我认为你的意思是parseLong而不是parseInt (2认同)

Lou*_*man 5

Java 8现在具有功能接口,例如ToLongFunction,它将其参数转换为long值.

这是一个误解ToLongFunction:它的目的是成为具有原始长输出的任何函数,无论是通过它Long.parseLong还是其他完全不同的函数; 也许是的Person.getIdNumber().

在任何情况下,ToLongFunction除了在编写一个接受 lambda 的方法时,你应该从不引用,除非你想要一个原始long结果.否则,直接写lambda.