我可以在 JAVA 8 中将哪种类型的参数传递给 ToIntFunction 函数式接口

which type of argument I can pass into ToIntFunction Functional Interface in JAVA 8

ToIntFunction<String> i = (x)-> Integer.parseInt(x);
System.out.println(i.applyAsInt("21235"));

以上是 TointFunction 的一个示例,其中 T 是类型字符串。 根据定义,我可以将哪些其他类型传递给它接受通用类型 T

除 String 之外的其他类型的任何其他示例。

ToIntFunction<T> 是一个功能接口,可帮助您将类型 T 的对象转换为 int

注意 您必须提供有关如何将类型 T 转换为 int.

的定义

在您的示例中,您已将 T 用作 String,并提供了一种通过以下方法将 string 转换为 int 的机制。

ToIntFunction<String> i  = (x)-> Integer.parseInt(x);  

因此,它适用于“21235”。但是,它会破坏 Integer.parseInt(x) 无法解析的任何其他内容。

如果要将不同的对象解析为 int,则必须编写适当的 ToIntFunction 函数。下面是将自定义类型 class MyClass 转换为 int 的示例。

class MyClass{ public String num;}
ToIntFunction<MyClass> i = (x1)-> Integer.parseInt(x1.num);

现在,上面的 ToIntFunction 将适用于类型为 MyClass 的对象。

功能接口ToIntFunction<T>只是一个没有任何实现的接口。 T 类型应替换为您实现此接口的任何类型。您不能对各种未知类型的所有对象范围使用唯一的实现。

这适用于您定义的字符串:

ToIntFunction<String> i = (x) -> Integer.parseInt(x);

您已将 T 替换为 String,该函数除了 String 没有讨论和 returns Integer。如果你想对另一种类型有相同的功能,实现它:

ToIntFunction<List<?>> i1  = list -> list.size();                  // A primitive example:
i1.applyAsInt(new ArrayList<>());                                  // gets size of any List

ToIntFunction<MyObject> i2 = myObject -> myObject.getNumber();     // A custom object
i2.applyAsInt(new MyObject());

关键是,任何类型都可以用一个简单的规则替换:实施必须确保 Integer 在任何情况下都会得到结果。

当使用 ToIntFunction<T> 作为目标类型时,这意味着赋值运算符右侧的任何 lambda/function 必须是消耗类型 T 并且它 returns int 并且 lambda 或自定义函数的逻辑类型无关紧要。

在这个具体的例子中,当你在赋值运算符的右侧使用 Integer.parseInt(...) 时,为了使代码编译和工作,唯一的类型 TString