Supplier
未提供andThen
方法,因此无法将另一个Function
链接到Supplier
的结果。
使用没有获得任何参数的Function<Void, R>
的唯一替代方法是什么?
换句话说,如果Supplier.andThen()
存在,我可以写:
Supplier<Exception> cleanedExceptionSupplier = exceptionSupplier.andThen(
e -> clean(e));
由于它不存在,我该如何干净地实施cleanedExceptionSupplier
?
答案 0 :(得分:4)
而不是:
Supplier<T> supp2 = () -> function.apply(supp1.get());
(使用你见过的方法不存在)
......你可以使用:
<table class="Report">
<tbody>
<tr>
<td>
<font><b>Record No: 1</b><br>
<i>Original Date</i>: 12/16/2011<br>
<i>Original Entered Date</i>: 12/16/2011
<br>
<br>
</font>
</td>
</tr>
</tbody>
<table>
答案 1 :(得分:4)
只需将我的备用解决方案添加为候选人
Function<Void, R> supplierAsFunction = v -> returnSomethingOfR();
supplierAsFunction.andThen(function).apply(null);
将null
作为参数应用相当丑陋,但此解决方案在仅使用java.util.function
类时保持功能样式。
答案 2 :(得分:1)
您可以使用CompletableFuture.supplyAsync(supplier)
。
让supplier
提供SomeType
类型的对象后,您将获得CompletableFuture<SomeType>
。
拥有CompletableFuture后,您可以使用thenAccept
,thenApply
等方法对其进行链接。
作为副作用,您的程序将变得更具反应性。调用supplyAsync
不会阻止。实际上,只要您不在CompletableFuture
上调用阻止操作,就永远不会阻止。
我会按如下方式解决你的情况:
Supplier<Exception> cleanedExceptionSupplier=<some way to get supplier>.
CompletableFuture.supplyAsync(cleanedExceptionSupplier).thenAccept(exception -> System.out.println(exception.toString());
旁注:我Supplier
的{{1}}看起来不合适。您想要提供的例外确实是主要影响吗?或者是(可能不需要的)角落案例?