- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
新的 Vavr 用户在这里。
我正在尝试模式匹配一组选项来执行语句,如果它们都是 Some,在 Scala 中我会这样做:
val maybeThis: Option[String] = ???
val maybeThat: Option[String] = ???
(maybeThis, maybeThat) match {
case (Some(dis), Some(that)) => ???
case _ => ???
}
在 Java 中,我正在尝试这种方法:
Tuple2<Option<String>, Option<String>> tuple = new Tuple2<>(Option.of(...), Option.of(...));
return Match(tuple).of(
Case($Tuple2($Some($(instanceOf(String.class))), $Some($(instanceOf(String.class)))),
(someThis, someThat) -> methodWhichEatsTwoStrings(someThis.get(), someThat.get())),
Case($(), t -> run(() -> {
throw new NullPointerException(...);
})));
然而,在这个实现中,编译器提示它期望
Some<Object>
而不是
Some<String>
, 如果我省略
$(instanceOf(String.class)
会发生同样的错误在图案中。
最佳答案
有一个称为理解的 vavr API 构造,它试图在 Java 中可以做到的程度模仿 Scala 的理解。使用该构造,您可以非常优雅地解决您的问题。见 For overload for handling two Options更多细节。这是一个示例代码片段:
String methodWhichEatsTwoStrings(String v1, String v2) {
return v1 + v2; //combine the two values in some way
}
...
Option<String> option1 = Option.some("value1");
Option<String> option2 = Option.some("value2");
String combined = For(option1, option2)
.yield((v1, v2) -> methodWhichEatsTwoStrings(v1, v2))
.getOrElseThrow(() -> new NullPointerException("reasons"));
当然,您可以使用
Option
option1
的不同类型的包装值和
option2
,或组合多个选项,而不仅仅是两个。您还可以为
yield
的返回值使用不同的类型。功能一样。我用过
String
到处都是为了简单起见并符合您的原始示例。
NullPointerException
如果其中一个或两个选项为空。也许尝试使用另一种 vavr 数据类型,如
Either
代表这样的错误情况?
关于java - 如何使用 Vavr 在 Java 中模式匹配具有定义类型的 Option 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63720606/
当函数定义如下时 static Function1 fibonacci = Function((BigInteger value) -> value.equals(BigInt
是否有任何选项可以对 vavrs 集合应用对象分解? 即类似于 scala 中的代码片段: val x = List(1, 2, 3) val t = x match { case List(a,
我正在尝试找出使用 VAVR 的 Try 的惯用方法。我正在查看的用例必须执行以下步骤: - 获取鞋子列表(调用可以抛出一个已检查的异常) - 清洁每只鞋(调用可以抛出一个已检查的异常) - 恢复每双
我有方法: @GetMapping public Either,ResponseEntity>> readAllOrderedByStatus() { var result = taskCru
对于我的 API,我正在解析一个对象并使用 lombok 构建器创建我的对象。其中一个变量是 LocalDateTime 类型的“arrivalTime”,当然它可以为 null。 我以前是这样的:
我有几个Vavr Either ',我想为每个 Either 调用一个具有 Right 值的函数。例如: Either either1 = .. Either either2 = .. Either
把 Google Guava kool-aid 从我们嘴里吐了出来,并一头扎进我们对 VAVR 及其闪闪发光的理想的新迷恋中,假设我们正在 map()ping Stream,在 Traversable
我希望得到您关于如何以功能性方式正确编写此代码的建议: private Option calculate(Integer X, Integer Y) { if (X otherMethod(
我有这样的代码: return validators .stream() .flatMap(v -> v.validate(scoreRequest
考虑到 Vavr 提供 tuples ,是否可以将它们用于 capturing groups在正则表达式中? 以HTTP请求行作为示例字符串进行匹配 GET /resource HTTP 1.1 和匹
使用Vavr的类型,我创建了一对 Some s: var input = Tuple(Some(1), Some(2)); 我想使用 Vavr 的匹配表达式获取整数 1 和 2;这就是我目前的做法:
所以我有一个返回 Vavr Try 的方法: public Try request() {...} request来 self 无法修改的来源。目前,我对 request 的结果进行了平面映射。并取决
我正在使用来自 vavr 的集合图书馆。我有一个这样定义的元素列表: List integers = List.of(1, 2, 3); 如何迭代列表的元素并同时访问索引?在 Groovy 中有一个方
谁能解释一下为什么这段代码: interface Lol { default Try> lol() { return Try.of(List::empty); } } class Lo
VAVR 集合是“不可变的”。 那么,如果我有静态变量,例如,保存所有 WebSocket session ,我将如何使用 VAVR 以使集合是线程安全的? 例如: @ServerEndpoint("
您好,我正在尝试将 vavr 添加到我的项目中,现在我正在为 Vavr.List 对象的正确序列化而苦苦挣扎。下面是我的 Controller : import io.vavr.collection.
是否有一种简洁、惯用的方法来从 Javaslang/Vavr List 创建顺序保留映射? List.toMap() 返回一个普通的 HashMap,所以这并不能实现。我现在拥有的是这样的东西—— l
我正在浏览 Vavr Usage Guide的部分关于使用 Match 和他们称之为“语法糖”的其他“语法糖”执行副作用。这是那里给出的例子: Match(arg).of( Case($(is
我的代码 open class Fail(override val message: String, override val cause: Throwable?) : RuntimeExceptio
这是我的代码片段: public static void main(String[] args) { Try.of(Main::getLines) .onFailur
我是一名优秀的程序员,十分优秀!