问题标签 [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.
java - Javaslang - 我如何加入两个成功的尝试?
我还在学习 Javaslang/Vavr,所以请原谅我的无知。我正在从事的项目停留在Javaslang 2.1.0上。
我的问题:是否有一种更“功能性”的方式(与命令式风格相反)来构建我的代码以仅在成功后才加入多个尝试?
我想独立地尝试每个输入,其想法是获取尽可能多的错误信息——我不想在遇到的第一个错误上停下来(所以orElse()
等不会成功)。但是一旦不再发现错误,我想做一些进一步涉及所有输入的事情。
我当前的代码如下所示(适当匿名):
你能建议一种模式来用if()
更多的函数式编程风格来代替吗?
java - 使用 java 和 Vavr 的函数式异常处理的逻辑
我正在尝试使用 Java 8 进行函数式编程的基础知识,我有一个简单的任务是在对象上设置一个属性,然后将其持久化。数据库正确类型是ltree
这样,如果它包含不允许的字符,它可能会失败。我想一个一个地处理项目并记录异常/成功。
我选择使用Vavr库是因为Try.of()
异常处理,我想学习使用它,因为它看起来很有帮助。
这是我想出的,但我还不够满意:
目标很简单,你能教我正确的方法吗?
java - 如何使用 vavr 仅记录某个异常
所以我有一个返回 Vavr 的方法Try
:
request
来自我无法修改的来源。目前,我对结果进行平面映射,request
并根据是否Result
有错误返回Try
异常或成功返回来自以下的数据Result
:
我想要的是在某些地方fetchData
首先使用数据,如果Try
成功,如果失败,则记录错误,如果错误是 a FailedRequestException
,否则,除异常外,执行其他操作,如下所示:
我对这种方法的问题是fetchData
返回 aTry
所以调用者无法知道 aFailedRequestException
是可能失败的一部分。我可以让fetchData
return aTry<Either<FailedRequestException, Data>>
但这也感觉不对。有没有办法以更优雅的方式完成上述操作?我也尝试使用Match
andCase
但Case
期望 aFunction
作为处理程序而不是Consumer
.
kotlin - 如何在带有左方差注释的情况下对 vavr 进行 flatMap
我的代码
将来会在那里定义更多失败
我有 2 个功能
当我尝试像这样调用它们时,fun1().flatMap{fun2(it)}
我得到了
来自 vavr 的代码
我猜 o 有这个错误,因为L
在 flatMap 定义中没有? extends L
有什么解决方法吗?
java - 如何不使用杰克逊 objectMapper 编写 Option.None (并阅读它)?
我使用jacksonObjectMapper
对我的一些数据进行序列化和反序列化,这些数据具有javaslangOption
类型的字段。我使用JavaslangModule
(和Jdk8Module
)。当它写入 json 时,Option.None
值字段被写为null
.
为了在以后添加新字段时减小 json 大小并提供一些简单的向后兼容性,我想要的是:
- 具有 Option.None 值的字段根本不会被写入,
- 缺少与 Option 类型的数据模型对应的 json 字段,读取时设置为 Option.None
=> 这可能吗,怎么做?
注意:我认为不写入/删除空 json 字段可以解决 (1)。可能吗?然后,读取它是否有效(即,如果 json 中缺少具有 Option 值的模型字段,请将其设置为无?
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?
java - 在 Vavr 中结合 Either 的?
我有几个Vavr Either,我想调用一个函数,其中Right
每个 Either 的值。例如:
我当然可以做这样的事情:
但这非常难看。在其他语言中,您可以使用 do-notation 或 for comprehension 之类的东西来展平结构。我知道 Vavr 有一个Validation的概念,它是一个应用函子,它允许你做:
这要好得多。
我的问题是,Vavr 中是否存在类似的东西来避免嵌套flatMap
结构?请注意,我不想将Either
's 转换为Validation
's。
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 并完成它的未来。它返回PROCESSING
或COMPLETED
。
我也在使用 Vavr,并愿意接受使用 Vavr 的建议Future
。
我们创建了三种可能的解决方案,它们都有各自的优点和缺点:
#1 等待另一个未来
问题
- 第二个
resultService
总是被调用。 - 我们占用整个线程 2 秒。
#1a 等待另一个 Future 检查第一个 Future
问题
- 第二个
resultService
仍然总是被调用。 - 我们需要将第一个 Future 传递给第二个,这不是很干净。
#2Object.notify
问题
- 复杂的代码(潜在的错误,不那么可读)。
#3 瓦夫Future.await
问题
- 需要一个未来中的未来以避免
await
取消内部未来。 - 将第一个 Future 移到第二个会破坏依赖
ThreadLocal
s 的 [legacy] 代码。 recoverWith
并捕捉TimeoutException
不是那么优雅。
#4CompletableFuture.orTimeout
问题
- 虽然在我的情况下,
processAndGet
未来没有被取消,但根据文档,它应该是。 - 异常处理不好。
#5CompletableFuture.completeOnTimeout
问题
- 虽然在我的情况下,
processAndGet
未来还没有完成,但根据文档,它应该是。 - 如果
processAndGet
想以null
不同的状态返回怎么办?
所有这些解决方案都有缺点并且需要额外的代码,但这感觉像是应该由CompletableFuture
VavrFuture
开箱即用的东西来支持。有一个更好的方法吗?
java - if (not null && not null) Java 函数式编程
在 Java 8 之前,我习惯用这种方式编写代码
我想用 Java API 甚至 vavr API 将下面的代码转换为纯 Java 函数样式
做这样的事情
关于如何以最佳方式编写此代码的任何想法?
非常感谢你的帮助