问题标签 [vavr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
316 浏览

java - 我可以显式键入一个模棱两可的方法调用并使用它吗?

我确信这在某处得到了回答,但我没有足够好的搜索词来找到它。我正在使用 io.vavr.control.Try 包,当我尝试对结果流中的元素使用 getOrElseThrow 方法时,该方法与 io.vavr.Value 类不明确。我可以指定我想以某种方式使用哪种方法,还是不可能?

在此处输入图像描述

0 投票
1 回答
114 浏览

java - Javaslang - 我如何加入两个成功的尝试?

我还在学习 Javaslang/Vavr,所以请原谅我的无知。我正在从事的项目停留在Javaslang 2.1.0上。

我的问题:是否有一种更“功能性”的方式(与命令式风格相反)来构建我的代码以在成功后才加入多个尝试?

我想独立地尝试每个输入,其想法是获取尽可能多的错误信息——我不想在遇到的第一个错误上停下来(所以orElse()等不会成功)。但是一旦不再发现错误,我想做一些进一步涉及所有输入的事情。

我当前的代码如下所示(适当匿名):

你能建议一种模式来用if()更多的函数式编程风格来代替吗?

0 投票
1 回答
767 浏览

java - 使用 java 和 Vavr 的函数式异常处理的逻辑

我正在尝试使用 Java 8 进行函数式编程的基础知识,我有一个简单的任务是在对象上设置一个属性,然后将其持久化。数据库正确类型是ltree这样,如果它包含不允许的字符,它可能会失败。我想一个一个地处理项目并记录异常/成功。

我选择使用Vavr库是因为Try.of()异常处理,我想学习使用它,因为它看起来很有帮助。

这是我想出的,但我还不够满意:

目标很简单,你能教我正确的方法吗?

0 投票
1 回答
566 浏览

java - 如何使用 vavr 仅记录某个异常

所以我有一个返回 Vavr 的方法Try

request来自我无法修改的来源。目前,我对结果进行平面映射,request并根据是否Result有错误返回Try异常或成功返回来自以下的数据Result

我想要的是在某些地方fetchData首先使用数据,如果Try成功,如果失败,则记录错误,如果错误是 a FailedRequestException,否则,除异常外,执行其他操作,如下所示:

我对这种方法的问题是fetchData返回 aTry所以调用者无法知道 aFailedRequestException是可能失败的一部分。我可以让fetchDatareturn aTry<Either<FailedRequestException, Data>>但这也感觉不对。有没有办法以更优雅的方式完成上述操作?我也尝试使用MatchandCaseCase期望 aFunction作为处理程序而不是Consumer.

0 投票
1 回答
529 浏览

kotlin - 如何在带有左方差注释的情况下对 vavr 进行 flatMap

我的代码

将来会在那里定义更多失败

我有 2 个功能

当我尝试像这样调用它们时,fun1().flatMap{fun2(it)} 我得到了

来自 vavr 的代码

我猜 o 有这个错误,因为L在 flatMap 定义中没有? extends L

有什么解决方法吗?

0 投票
2 回答
952 浏览

java - 如何不使用杰克逊 objectMapper 编写 Option.None (并阅读它)?

我使用jacksonObjectMapper对我的一些数据进行序列化和反序列化,这些数据具有javaslangOption类型的字段。我使用JavaslangModule(和Jdk8Module)。当它写入 json 时,Option.None值字段被写为null.

为了在以后添加新字段时减小 json 大小并提供一些简单的向后兼容性,我想要的是:

  1. 具有 Option.None 值的字段根本不会被写入,
  2. 缺少与 Option 类型的数据模型对应的 json 字段,读取时设置为 Option.None

=> 这可能吗,怎么做?

注意:我认为不写入/删除空 json 字段可以解决 (1)。可能吗?然后,读取它是否有效(即,如果 json 中缺少具有 Option 值的模型字段,请将其设置为无?

0 投票
3 回答
483 浏览

java - Why does vavr's Try container catches Throwable but not Exception?

I'm not an expert in java's type system and exception handling. But i found in SO that we should only catch exceptions but not throwable's.

Here is the link: Difference between using Throwable and Exception in a try catch

In Vavr's library i found this source code:

Would i have any issues in future if i will use this container? Will i miss some critical exceptions that may occur during execution of 'of' function?

0 投票
1 回答
1818 浏览

java - 在 Vavr 中结合 Either 的?

我有几个Vavr Either,我想调用一个函数,其中Right每个 Either 的值。例如:

我当然可以做这样的事情:

但这非常难看。在其他语言中,您可以使用 do-notation 或 for comprehension 之类的东西来展平结构。我知道 Vavr 有一个Validation的概念,它是一个应用函子,它允许你做:

这要好得多。

我的问题是,Vavr 中是否存在类似的东西来避免嵌套flatMap结构?请注意,我不想Either's 转换为Validation's。

0 投票
1 回答
1059 浏览

java - 尝试等待 CompletableFuture

有没有办法在超时后不取消未来的情况下尝试等待一段CompletableFuture时间才能返回不同的结果?

我有一个服务(让我们称之为expensiveService)运行它自己的事情。它返回一个结果:

我愿意 [阻止并] 等待它一小段时间(比如说 2 秒)。如果它没有完成,我想返回一个不同的结果,但我希望服务继续做自己的事情。然后询问服务是否完成(例如通过 websockets 或其他)将是客户的工作。

即我们有以下情况:

  • expensiveService.processAndGet()需要 1 秒并完成它的未来。它返回COMPLETED
  • expensiveService.processAndGet()1 秒后失败。它返回FAILED
  • expensiveService.processAndGet()需要 5 秒并完成它的未来。它返回PROCESSING。如果我们向另一个服务询问结果,我们会得到COMPLETED.
  • expensiveService.processAndGet()5 秒后失败。它返回PROCESSING。如果我们向另一个服务询问结果,我们会得到FAILED.

在这种特定情况下,我们实际上需要在超时时获取当前结果对象,从而导致以下额外的边缘情况。这会导致以下建议的解决方案出现一些问题:

  • expensiveService.processAndGet()需要 2.01 s 并完成它的未来。它返回PROCESSINGCOMPLETED

我也在使用 Vavr,并愿意接受使用 Vavr 的建议Future

我们创建了三种可能的解决方案,它们都有各自的优点和缺点:

#1 等待另一个未来

问题

  1. 第二个resultService总是被调用。
  2. 我们占用整个线程 2 秒。

#1a 等待另一个 Future 检查第一个 Future

问题

  1. 第二个resultService仍然总是被调用。
  2. 我们需要将第一个 Future 传递给第二个,这不是很干净。

#2Object.notify

问题

  1. 复杂的代码(潜在的错误,不那么可读)。

#3 瓦夫Future.await

问题

  1. 需要一个未来中的未来以避免await取消内部未来。
  2. 将第一个 Future 移到第二个会破坏依赖ThreadLocals 的 [legacy] 代码。
  3. recoverWith并捕捉TimeoutException不是那么优雅。

#4CompletableFuture.orTimeout

问题

  1. 虽然在我的情况下,processAndGet未来没有被取消,但根据文档,它应该是。
  2. 异常处理不好。

#5CompletableFuture.completeOnTimeout

问题

  1. 虽然在我的情况下,processAndGet未来还没有完成,但根据文档,它应该是。
  2. 如果processAndGet想以null不同的状态返回怎么办?

所有这些解决方案都有缺点并且需要额外的代码,但这感觉像是应该由CompletableFutureVavrFuture开箱即用的东西来支持。有一个更好的方法吗?

0 投票
1 回答
311 浏览

java - if (not null && not null) Java 函数式编程

在 Java 8 之前,我习惯用这种方式编写代码

我想用 Java API 甚至 vavr API 将下面的代码转换为纯 Java 函数样式

做这样的事情

关于如何以最佳方式编写此代码的任何想法?

非常感谢你的帮助