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

时间:2018-07-21 15:02:02

标签: java lambda java-8 functional-interface

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

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

除String以外的其他与其他类型相同的示例。

3 个答案:

答案 0 :(得分:3)

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

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

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

您已将T替换为String,该函数除String外没有讨论,并返回了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

答案 1 :(得分:1)

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

请注意,您必须提供有关如何将类型T转换为int的定义。

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

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

因此,它适用于“ 21235”。但是,它会中断Integer.parseInt(x)无法解析的其他任何事情。

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

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

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

答案 2 :(得分:0)

使用ToIntFunction<T>作为目标类型时,这意味着赋值运算符右侧的任何lambda /函数都必须是消耗类型T并返回int的对象。 Lambda或自定义函数执行哪种逻辑都没有关系。

在此特定示例中,当您在赋值运算符的右侧使用Integer.parseInt(...)时,唯一的类型T可以使代码编译和工作为{{1 }}。

相关问题