Java 如何实现泛型函数方法参数?
目前,我必须根据要传递到方法中的Java 如何实现泛型函数方法参数?,java,function,generics,java-8,java-stream,Java,Function,Generics,Java 8,Java Stream,目前,我必须根据要传递到方法中的函数的类型定义不同的方法,例如: addCustomParameter(orderLinePrefix+“quantity=”,concatenateLong(orderLines,OrderPart::getQuantity)); addCustomParameter(orderLinePrefix+“assemblue=,concatenateDouble(orderLines,OrderPart::getassemble)); addCustomParame
函数的类型定义不同的方法,例如:
addCustomParameter(orderLinePrefix+“quantity=”,concatenateLong(orderLines,OrderPart::getQuantity));
addCustomParameter(orderLinePrefix+“assemblue=,concatenateDouble(orderLines,OrderPart::getassemble));
addCustomParameter(orderLinePrefix+“dropship=”,concatenateBolean(orderLines,OrderPart::isDropship));
方法如下所示:
@Nonnull
公共字符串concatenatebolean(@Nonnull最终集合项,@Nonnull最终函数映射器)
{
returnitems.stream()
.map(mapper)
.map(字符串::valueOf)
.收取(加入(“,”);
}
@非空
公共字符串连接长(@Nonnull最终集合项,@Nonnull最终函数映射器)
{
returnitems.stream()
.map(mapper)
.map(字符串::valueOf)
.收取(加入(“,”);
}
@非空
公共字符串连接双(@Nonnull最终集合项,@Nonnull最终函数映射器)
{
returnitems.stream()
.map(mapper)
.map(字符串::valueOf)
.收取(加入(“,”);
}
如何将上述3个方法重构为一个可以接受任何类型并返回字符串的方法?为映射器使用通配符返回类型:
@Nonnull
public <T> String concatenateAny(@Nonnull final Collection<T> items, @Nonnull final Function<? super T, ?> mapper)
{
return items.stream()
.map(mapper)
.map(String::valueOf)
.collect(joining(","));
}
@Nonnull
公共字符串concatenateAny(@Nonnull最终集合项,@Nonnull最终函数映射器)
{
returnitems.stream()
.map(mapper)
.map(字符串::valueOf)
.收取(加入(“,”);
}
和函数
?请注意,由于OP的实际用例在每次调用时都使用方法引用参数,因此函数映射器
参数也可以工作。但是使用通配符可以提高现有函数
实例的灵活性。