问题标签 [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 投票
2 回答
1275 浏览

java - 有没有更好的方法在 Java Vavr Try 子句链中记录失败?

我试图在每个失败阶段记录,据我所知,我需要将 try 和 log 嵌套在平面图中。

有没有比上述更简单的方法?库中是否有可用于替换嵌套Try.of()s 的函数?

0 投票
3 回答
1259 浏览

java - 带有泛型的 Vavr 给出了不兼容的类型

谁能解释一下为什么这段代码:

如果我取消注释onFailure语句,编译失败?不知道这里会发生什么。如何改进它?

0 投票
1 回答
571 浏览

java-8 - 将不同结果类型的多个“Try”实例组合为应用程序

是否有一个用于Try在 Vavr 中组合实例的 api,类似于 Scalaz 应用运算符的|@|工作方式?

具体来说,如果我有两个以上的Try实例,例如Try<X>Try<Y>Try<Z>我想使用 3-arg 函数以应用方式组合这些实例。

我正在寻找类似于以下内容的函数签名:

0 投票
1 回答
678 浏览

java-8 - 为什么 Vavr Either 不能识别 map() 函数的参数?

我正在用神奇的 vavr 库(0.9.2)弄脏我的手。

这是一个代码片段,旨在收集Either

retrieveRecordsAsPerCriteria方法是这样定义的:

编译器抱怨:

./com/myApp/application/ReportByTeamResource.java:58:错误:不兼容的类型:无法推断类型变量 L、R .map((e) -> retrieveRecordsAsPerCriteria(e.right().get()) ); ^(实际参数列表和形式参数列表的长度不同)其中 L,R 是类型变量: L 扩展在方法 right(R) 中声明的对象 R 扩展在方法 right(R) 中声明的对象 1 错误

该列表来自 java.util.List。

我无法理解问题的根源。类型应该很容易推断,或者我认为。

在此处输入图像描述

直到这条令人反感的线之前,IntelliJ 似乎都可以接受转换!然而,在那一行中,类型参数 U 是不可破译的。由于某种原因,有人可以将我推到我看不到的路径吗?

0 投票
1 回答
248 浏览

java - 类型推断似乎失败 vavr 的 Try 适用于 jOOQ 的 fetchOne() 函数

我正在使用 vavr 和 jOOQ,这是最近出现的两个很棒的库,允许我们在常规 Java 服务器应用程序中使用函数式方言。

我正在尝试使用 jOOQ,它相当于 SQL 的 select count (*)

查询是这样形成的:

jOOQ 的生成器运行良好,这里没有任何类型不匹配。所以,我想,查询是正确形成的。

然后,我正在使用 vavr 的 Try,因此:

尽管我提供了帮助,但编译器无法通过描述目标类型来推断字段的类型:Integer.class

不出所料,当我强制输入类型时,代码运行得非常好。我只是在编译器认为.. er .. 令人反感的那一行引入了显式转换!

根据我对 jOOQ 库的理解,尤其是 @LukasEder 的解释,我尝试了其他几种方法

到目前为止,我还没有尝试过引入Converter,因为对于单个字段值,这在我看来似乎是不必要的!但是,如果是这样的话,那么我想有一个提示。

回应@LukasEder


在 Lukas 的推动下,我以这种方式修改了该方法:

..而且,现在和平再次在世界上盛行!

谢谢,卢卡斯!

0 投票
1 回答
446 浏览

java - JSON 验证在运行时失败,即使测试通过

我正在使用流行的 JSON 模式库 - json-schema-validator - 根据我自己的模式检查传入的有效负载。

以下是我悲痛的总结:

没有任何问题,到这里为止。在其指定位置找到 Schema 文件,并准备好 schemaNode。

给定一个传入的 JSONString(更明确的有效负载),这就是我确认其与之前加载的模式的正确性的方式:

这个函数,被称为:

build.gradle文件的相关部分:

从IntelliJ IDEA 内部运行时,这工作得非常(包括所有测试用例)。但是,当我构建 JAR 并从命令行运行时抛出的异常非常令人困惑:

在此处输入图像描述

JVM 发现令人反感的源代码行 (ReportByTeamCriteriaSchemaChecker.java:59) 对应于前面提到的函数调用:

schema.validate(jsonNode)

我正在使用 vavr - 因此,我最初怀疑 vavr 和 json-schema-validator 和 Jackson 在一起是否不舒服 - 但我已经确认即使我不使用 vavr 的 Try,异常也会在运行时引发。

我在 StackOverflow 上提到了这个对话,但对我来说用处不大。

我正在使用 JDK 1.9:

熟悉 JSON 验证的任何人都可以指出正确的方向吗?


更新

作为实验,我在依赖项中添加了以下内容:

在这种情况下,当我从命令行运行 JAR 时,错误消息完全相反:

如果有的话,我更困惑!:-) 为什么它应该在 IntelliJ 内部正常运行,但在从命令行运行可执行 JAR时会抛出此错误?

0 投票
0 回答
610 浏览

java - Jackson - @JsonCreator 返回泛型

我想在我的命令 dto 中集成 vavr 验证库,这样当命令 dto 从请求反序列化时,静态工厂的返回类型将为 Try 但杰克逊抛出以下错误:

类型定义错误:[简单类型,类 com.foo.command.FooCommand];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例com.foo.command.FooCommand(没有创建者,如默认构造,存在):无法从对象值反序列化(没有基于委托或属性的创建者)

这是 FooCommand

我使用的是spring 5,它被注释为将请求主体自动反序列化为控制器参数。这样的事情可能吗?提前致谢。

0 投票
1 回答
339 浏览

java - 如何使用 Vavr 正确实现这一点?

我想就如何以功能方式正确编写此代码获得您的建议:

计算很简单:

对于otherMethod,这是我的第一种方法:

但是,与第一个版本相比,我觉得代码不像我预期的那样可读(双重flatMap让人难以理解,乍一看,为什么会有)

我尝试了另一个,这改善了讲座:

它更具可读性,但我认为我在这种情况下没有正确使用 For-comprehension。

您对此案有何建议?我是否正确使用 vavr 的 API?

谢谢

0 投票
1 回答
208 浏览

java - 从 Either 中取消装箱值vavr

背景

我有一个可以返回的小函数Either<String, Float>。如果成功,则返回浮点数,否则返回错误字符串。

我的目标是在管道中执行一系列操作,并使用 Either 实现面向铁路的编程。

代码

这段代码做了一系列简单的操作。首先,我创建一个值为 2 的任意一个,然后将其递增,最后将其翻倍。这些操作的结果是 6。

问题

数学运算的结果是 6.0f,但这不是我得到的。相反,我得到Right(6.0f).

这是一个阻止代码编译的问题。我在 Either Monad 中有一个值但是在检查了Either 的 API之后,我没有找到将其拆箱并按原样获取值的方法

我考虑过使用getOrElseGet,但即使该方法也返回一个 Right。

问题

如何访问存储在 Either Monad 中的实际值?

0 投票
1 回答
246 浏览

java - 在 Vavr 中将字符串分组在一起

我正在尝试以下代码:

但这会创建一组单个字符串,基本上就像做一个#split

我该如何解决?期望值为