是否有转换java.util.function的标准方法,Consumer<;T>;转换为java.util.function.function<;T、 无效>;

是否有转换java.util.function的标准方法,Consumer<;T>;转换为java.util.function.function<;T、 无效>;,java,java-8,Java,Java 8,我有一个消费者,我想把它转换成函数 我可以通过使用 public <T> Function<T, Void> consumerToFunction(Consumer<T> consumer) { return x -> { consumer.accept(x); return null; }; } 公共功能消费者功能(消费者) { 返回x->{ 消费者接受(x); 返回null; }; } 但我怀疑类似

我有一个
消费者
,我想把它转换成
函数

我可以通过使用

public <T> Function<T, Void> consumerToFunction(Consumer<T> consumer)
{
    return x -> {
        consumer.accept(x);
        return null;
    };
}
公共功能消费者功能(消费者)
{
返回x->{
消费者接受(x);
返回null;
};
}

但我怀疑类似的东西可能已经存在于JDK中或公共库中。

看起来您需要将
消费者
调整为
函数
。您已经创建了一个很好的示例

[T] 适配器模式是一种软件设计模式,允许从另一个接口使用现有类的接口

您正允许从
功能使用
消费者


我知道功能接口之间没有JDK内置转换器,但这似乎是应用标准模式解决问题的好方法。

标准方法不存在,但这应该可以解决问题:

Function<T, Void> adapt(final Consumer<T> consumer) {
    return t -> {
        consumer.accept(t);
        return null;
    };
}
功能自适应(最终用户){
返回t->{
消费者接受(t);
返回null;
};
}

这是按照from中提到的适配器模式进行的。

不,我不这么认为,这看起来很正确。也就是说,你为什么想要这个<代码>功能通常应无副作用。
消费者::接受
?编辑:,无法将void转换为void。另外,
Void
T
的顺序错误。我有一个
Consumer
实例,我使用的API需要一个
函数。通话最后将
R
返回给我。我不需要这个
R
并且可以安全地忽略它。我唯一要做的是,将lambda表达式放在调用
ConsumerFunction
的地方,然后去掉这个方法……我最近的例子是
java.util.concurrent.CompletableFuture.Exception(Function)
(即从没有返回值的可完成未来引发的异常的处理程序)。