问题标签 [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 回答
2154 浏览

java - 如何映射“使用资源尝试”异常类型?

在 Cyclops React “Try with Resources”块中,我想将 an 映射IOException到自定义异常类型。我也用 Javaslang 尝试过这个,并且似乎不太灵活,因为它对待所有异常都是一样的。

代码示例:

这可以以更优雅的方式完成吗?还是没有任何意义,最好返回Try<String, IOException>

免责声明:我是一般使用 Cyclops React 库和函数式编程的新手,所以我可能对概念有严重的误解。

0 投票
2 回答
1837 浏览

functional-programming - javaslang Tuples2 到 Map 转换的列表

使用 javaslang 2.1.0-alpha将 aStream<Tuple2<T,U>>转换为 a的最惯用方法是什么?Map<T,List<U>>

应该变成:

0 投票
1 回答
110 浏览

java - Javaslang - 在模式匹配器中运行方法

我正在尝试将 javaslang 的模式匹配合并到一个经典的工厂模式中:

然而,这溢出并且所有方法都运行了(我收到了对不同级别的记录器的四个相同的调用)。

0 投票
0 回答
99 浏览

java - Javaslang Option.nothing()

最近我开始阅读有关 Javaslang 及其对 Java 8 添加的类的改进。深入研究文档时,我遇到了以下方法:

它返回一个单例类型的实例Option<Void>。但是,我想不出一个可以派上用场的用例(也许是为了表明它是链条的末端,但我仍然可以这样做.map(v -> 1))。是否有一个用例可以方便且更可取None

0 投票
1 回答
164 浏览

caching - 如何使用实例转发器缓存检测类?

用例是实现脏字段跟踪器。为此,我有一个界面:

在拦截器类中,包装方法是:

该方法dirtyableFor定义了一个 ByteBuddy,它在每次调用时转发到一个特定的实例。但是,在每次调用时进行检测有点昂贵,因此它会缓存来自给定实例类的检测子类。为此,我使用resilience4j库(又名javaslang-circuitbreaker)。

从日志中,检测时间从缓存未命中的 70-100 毫秒下降到缓存命中的 0-2 毫秒。

为了完整起见,这里是拦截器方法:

这个解决方案效果很好,除了DirtyableInterceptor缓存命中总是相同的,所以委托实例也是相同的。

是否可以将转发器绑定到实例的供应商,以便拦截的方法转发给它?怎么可能做到这一点?

0 投票
1 回答
302 浏览

java - 对不可变 Map 的无锁原子更新

给定一个 Javaslang / Vavr不可变映射,以及一个更新该映射的函数:

如何确保setBar()对不同Foo密钥的两个并发调用都会记录其更新?

似乎存在调用交错的风险,这样:

  1. 线程 A 得到{}
  2. 线程 B 得到{}
  3. 线程 B 计算{}+ fooB -> barB={(fooB -> barB)}
  4. 线程 B 设置myMap{(fooB -> barB)}
  5. 线程 A 计算{}+ fooA -> barA={(fooA -> barA)}
  6. 线程 A 设置myMap{(fooA -> barA)}
  7. 线程 B 的更新丢失

使用AtomicReference,我或多或少地基于Java Concurrency in PracticeConcurrentStack的“非阻塞算法”部分中的方法提出了以下内容。

这个对吗?如果是这样,它是我可能得到的那样好的实现,还是有一些更简单的东西(例如AtomicReference,我缺少一些实现这种模式的 Java 8 API)?

0 投票
2 回答
1632 浏览

list - 列表中的 Javaslang / Vavr LinkedHashMap

是否有一种简洁、惯用的方式来从 Javaslang / Vavr 创建一个保持顺序的映射ListList.toMap()返回一个 plain HashMap,所以不这样做。我现在拥有的是这样的——

- 但这似乎比必要的更冗长,而且效率也可能更低。

0 投票
1 回答
202 浏览

java - Eclipse 将(工作)代码标记为编译错误并且不会运行

我有一些使用 Javaslang 的相当复杂的代码。如果我将它编译成一个 jar,它运行良好。但是,当我尝试在 Eclipse 中进入它进行调试时,Eclipse 将其标记为编译错误并在它到达该行时死亡。特别奇怪的部分是,这在一周前有效,并且代码在此期间没有更改。

我尝试过的事情:

  • 清理项目(包括取消选中“自动构建”)
  • 从 Eclipse 中删除项目,删除 .project 和 .settings,从头开始重新导入
  • 从 Eclipse 中删除项目,删除 .project、.classpath、.settings,执行 mvn eclipse:eclipse,重新导入

Maven 构建这个没有错误[在 Eclipse 和命令行中]。我可以运行这个依赖的项目并让它从 JAR 中访问这个代码,所以我知道它可以工作。我只是不能让 Eclipse 在“运行”或“调试”模式下访问项目中的代码。

所以类型都是正确的,但 Eclipse 声称:

0 投票
1 回答
4502 浏览

java - 不可变队列需要什么?

我已经使用 Java 好几年了。最近遇到了 Vavr,一个用于 Java 的函数库,它提供了不可变的集合 API。我很想知道拥有不可变队列的原因。

我的理解是,队列用于在一端向其生成数据,然后另一个线程从另一端使用数据。

Immutable Queue 不允许你在构建后添加数据,那我为什么要在这里使用 Queue。

理想情况下,我会按如下方式处理队列,但对于不可变队列,这会进入无限循环。

当我用谷歌搜索时,所有的讨论都围绕着如何实现一个不可变队列,但没有解释它的必要性。

0 投票
2 回答
90 浏览

java - 从可选值的供应商序列中提取第一个定义的值(如果有)

给定一个序列Supplier<Option<T>>——例如,一个方法引用列表——获得第一个定义结果的惯用方法是什么,如果有的话?理想情况下,在第一个成功的结果之后不再调用任何供应商。

我现在拥有的是:

但似乎应该有一种方法可以使平面图更平坦。