Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现泛型函数方法参数?_Java_Function_Generics_Java 8_Java Stream - Fatal编程技术网

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的实际用例在每次调用时都使用方法引用参数,因此
函数映射器
参数也可以工作。但是使用通配符可以提高现有
函数
实例的灵活性。