当前位置: 首页 > 知识库问答 >
问题:

Streams peek()的未来等价物是什么?

杭涵映
2023-03-14

这里的答案引用了一个包含所有完全未来方法的表,但这并不是我要找的,或者我可能搞错了。

我正在寻找Streams'peek()的完全未来等价物,因此基本上是一个返回输入参数的thenApply,或者一个不返回VoidthenRun。我认为有两种方法都不能在语义上准确地表达我的意图,但可以做到这一点:

(..)
.thenApply((a) -> {
   doSomething();
   return a;
}
(..)

java prettyprint-override">(..)
.whenComplete((result, exception) -> {
   if (exception == null) {
      doSomething();
   }
}
(..)

两者都从上一个阶段获取输入,允许我执行一个操作并以相同的类型返回到下一个阶段。在这两种方法中,后一种方法将我的时间限制在其他事情完成时,而不是在前一个必要阶段完成后立即异步。

我也一直在寻找一个以消费者函数为参数的身份函数,但似乎我必须自己写:

public static <T> Function<T, T> identityConsumer(Consumer<T> c) {
    return a -> { c.accept(a); return a; };
}
java prettyprint-override">(..)
.thenApply(identityConsumer(a -> doSomething()));
(..)

在编写自己的util函数之前,有没有一种优雅的方法可以在中间阶段执行操作,在中间阶段我不必返回某些内容,同时保持阶段的当前类型?

共有1个答案

空翼
2023-03-14

Stream不同,您可以从一个未来生成多个函数链,因此不必在一个调用链中完成所有操作。我会这样处理你的问题:

var f1 = CompletableFuture.supplyAsync(...);
f1.thenRun(() -> doSomething()); // this is your "peek"
var f2 = f1.thenApply(...); // continue your chain of operations here
 类似资料:
  • 我仍然在学习和试验JavaFX中的GUIs,我似乎无法得到我所希望的“外观”…我试图在一个面板中分组几个标签,然后在另一个面板中添加另一个标签。但我似乎不知道如何在JavaFX中正确使用“JPanels”? 如有任何帮助,将不胜感激 编辑:这是我试图通过尝试不同的布局来实现的,但运气仍然不好

  • 在Mac和Windows上,可以使用 <罢工> (替换 )和 (替换 ) (Docker 18.03+)位于容器内。 对于Linux来说,有没有一个可以在不传递env变量或使用各种CLI命令提取它的情况下开箱即用的方法?

  • 我们有以下场景:使用Sonarqube扫描Windows10中的两个项目。 null 提前谢了。

  • 我看到Kotlin有,它们相当于Java中的。 现在我想知道,是否有等价于Java的?

  • 但我想重写此行为,以便打印到控制台: 是否有方法清理此输出?我看过协议: 我认为会自动“看到”这一点,但情况似乎并非如此:

  • 我尝试使用numpy阵列执行以下操作: 这应该给出一个结果: 但如果输入向量是numpy数组: 它(预期)返回一个: 问题是,在此之后,我需要将结果转换回numpy数组。 我想知道的是,如果有一个有效的numpy函数可以避免这些来回的转换,那该怎么办?