问题标签 [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 - 有没有更好的方法在 Java Vavr Try 子句链中记录失败?
我试图在每个失败阶段记录,据我所知,我需要将 try 和 log 嵌套在平面图中。
有没有比上述更简单的方法?库中是否有可用于替换嵌套Try.of()
s 的函数?
java - 带有泛型的 Vavr 给出了不兼容的类型
谁能解释一下为什么这段代码:
如果我取消注释onFailure
语句,编译失败?不知道这里会发生什么。如何改进它?
java-8 - 将不同结果类型的多个“Try”实例组合为应用程序
是否有一个用于Try
在 Vavr 中组合实例的 api,类似于 Scalaz 应用运算符的|@|
工作方式?
具体来说,如果我有两个以上的Try
实例,例如Try<X>
和Try<Y>
,Try<Z>
我想使用 3-arg 函数以应用方式组合这些实例。
我正在寻找类似于以下内容的函数签名:
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 是不可破译的。由于某种原因,有人可以将我推到我看不到的路径吗?
java - 类型推断似乎失败 vavr 的 Try 适用于 jOOQ 的 fetchOne() 函数
我正在使用 vavr 和 jOOQ,这是最近出现的两个很棒的库,允许我们在常规 Java 服务器应用程序中使用函数式方言。
我正在尝试使用 jOOQ,它相当于 SQL 的 select count (*)。
查询是这样形成的:
jOOQ 的生成器运行良好,这里没有任何类型不匹配。所以,我想,查询是正确形成的。
然后,我正在使用 vavr 的 Try,因此:
尽管我提供了帮助,但编译器无法通过描述目标类型来推断字段的类型:Integer.class!
不出所料,当我强制输入类型时,代码运行得非常好。我只是在编译器认为.. er .. 令人反感的那一行引入了显式转换!
根据我对 jOOQ 库的理解,尤其是 @LukasEder 的解释,我尝试了其他几种方法。
到目前为止,我还没有尝试过引入Converter,因为对于单个字段值,这在我看来似乎是不必要的!但是,如果是这样的话,那么我想有一个提示。
回应@LukasEder:
在 Lukas 的推动下,我以这种方式修改了该方法:
..而且,现在和平再次在世界上盛行!
谢谢,卢卡斯!
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时会抛出此错误?
java - Jackson - @JsonCreator 返回泛型
我想在我的命令 dto 中集成 vavr 验证库,这样当命令 dto 从请求反序列化时,静态工厂的返回类型将为 Try 但杰克逊抛出以下错误:
类型定义错误:[简单类型,类 com.foo.command.FooCommand];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例
com.foo.command.FooCommand
(没有创建者,如默认构造,存在):无法从对象值反序列化(没有基于委托或属性的创建者)
这是 FooCommand
我使用的是spring 5,它被注释为将请求主体自动反序列化为控制器参数。这样的事情可能吗?提前致谢。
java - 如何使用 Vavr 正确实现这一点?
我想就如何以功能方式正确编写此代码获得您的建议:
计算很简单:
对于otherMethod
,这是我的第一种方法:
但是,与第一个版本相比,我觉得代码不像我预期的那样可读(双重flatMap
让人难以理解,乍一看,为什么会有)
我尝试了另一个,这改善了讲座:
它更具可读性,但我认为我在这种情况下没有正确使用 For-comprehension。
您对此案有何建议?我是否正确使用 vavr 的 API?
谢谢
java - 从 Either 中取消装箱值vavr
背景
我有一个可以返回的小函数Either<String, Float>
。如果成功,则返回浮点数,否则返回错误字符串。
我的目标是在管道中执行一系列操作,并使用 Either 实现面向铁路的编程。
代码
这段代码做了一系列简单的操作。首先,我创建一个值为 2 的任意一个,然后将其递增,最后将其翻倍。这些操作的结果是 6。
问题
数学运算的结果是 6.0f,但这不是我得到的。相反,我得到Right(6.0f)
.
这是一个阻止代码编译的问题。我在 Either Monad 中有一个值,但是在检查了Either 的 API之后,我没有找到将其拆箱并按原样获取值的方法。
我考虑过使用getOrElseGet
,但即使该方法也返回一个 Right。
问题
如何访问存储在 Either Monad 中的实际值?
java - 在 Vavr 中将字符串分组在一起
我正在尝试以下代码:
但这会创建一组单个字符串,基本上就像做一个#split
:
我该如何解决?期望值为