问题标签 [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 - 如何映射“使用资源尝试”异常类型?
在 Cyclops React “Try with Resources”块中,我想将 an 映射IOException
到自定义异常类型。我也用 Javaslang 尝试过这个,并且似乎不太灵活,因为它对待所有异常都是一样的。
代码示例:
这可以以更优雅的方式完成吗?还是没有任何意义,最好返回Try<String, IOException>
?
免责声明:我是一般使用 Cyclops React 库和函数式编程的新手,所以我可能对概念有严重的误解。
functional-programming - javaslang Tuples2 到 Map 转换的列表
使用 javaslang 2.1.0-alpha将 aStream<Tuple2<T,U>>
转换为 a的最惯用方法是什么?Map<T,List<U>>
应该变成:
java - Javaslang - 在模式匹配器中运行方法
我正在尝试将 javaslang 的模式匹配合并到一个经典的工厂模式中:
然而,这溢出并且所有方法都运行了(我收到了对不同级别的记录器的四个相同的调用)。
java - Javaslang Option.nothing()
最近我开始阅读有关 Javaslang 及其对 Java 8 添加的类的改进。深入研究文档时,我遇到了以下方法:
它返回一个单例类型的实例Option<Void>
。但是,我想不出一个可以派上用场的用例(也许是为了表明它是链条的末端,但我仍然可以这样做.map(v -> 1)
)。是否有一个用例可以方便且更可取None
?
caching - 如何使用实例转发器缓存检测类?
用例是实现脏字段跟踪器。为此,我有一个界面:
在拦截器类中,包装方法是:
该方法dirtyableFor
定义了一个 ByteBuddy,它在每次调用时转发到一个特定的实例。但是,在每次调用时进行检测有点昂贵,因此它会缓存来自给定实例类的检测子类。为此,我使用resilience4j
库(又名javaslang-circuitbreaker
)。
从日志中,检测时间从缓存未命中的 70-100 毫秒下降到缓存命中的 0-2 毫秒。
为了完整起见,这里是拦截器方法:
这个解决方案效果很好,除了DirtyableInterceptor
缓存命中总是相同的,所以委托实例也是相同的。
是否可以将转发器绑定到实例的供应商,以便拦截的方法转发给它?怎么可能做到这一点?
java - 对不可变 Map 的无锁原子更新
给定一个 Javaslang / Vavr不可变映射,以及一个更新该映射的函数:
如何确保setBar()
对不同Foo
密钥的两个并发调用都会记录其更新?
似乎存在调用交错的风险,这样:
- 线程 A 得到
{}
- 线程 B 得到
{}
- 线程 B 计算
{}
+fooB -> barB
={(fooB -> barB)}
- 线程 B 设置
myMap
为{(fooB -> barB)}
- 线程 A 计算
{}
+fooA -> barA
={(fooA -> barA)}
- 线程 A 设置
myMap
为{(fooA -> barA)}
- 线程 B 的更新丢失
使用AtomicReference
,我或多或少地基于Java Concurrency in PracticeConcurrentStack
的“非阻塞算法”部分中的方法提出了以下内容。
这个对吗?如果是这样,它是我可能得到的那样好的实现,还是有一些更简单的东西(例如AtomicReference
,我缺少一些实现这种模式的 Java 8 API)?
list - 列表中的 Javaslang / Vavr LinkedHashMap
是否有一种简洁、惯用的方式来从 Javaslang / Vavr 创建一个保持顺序的映射List
?List.toMap()
返回一个 plain HashMap
,所以不这样做。我现在拥有的是这样的——
- 但这似乎比必要的更冗长,而且效率也可能更低。
java - Eclipse 将(工作)代码标记为编译错误并且不会运行
我有一些使用 Javaslang 的相当复杂的代码。如果我将它编译成一个 jar,它运行良好。但是,当我尝试在 Eclipse 中进入它进行调试时,Eclipse 将其标记为编译错误并在它到达该行时死亡。特别奇怪的部分是,这在一周前有效,并且代码在此期间没有更改。
我尝试过的事情:
- 清理项目(包括取消选中“自动构建”)
- 从 Eclipse 中删除项目,删除 .project 和 .settings,从头开始重新导入
- 从 Eclipse 中删除项目,删除 .project、.classpath、.settings,执行 mvn eclipse:eclipse,重新导入
Maven 构建这个没有错误[在 Eclipse 和命令行中]。我可以运行这个依赖的项目并让它从 JAR 中访问这个代码,所以我知道它可以工作。我只是不能让 Eclipse 在“运行”或“调试”模式下访问项目中的代码。
所以类型都是正确的,但 Eclipse 声称:
java - 不可变队列需要什么?
我已经使用 Java 好几年了。最近遇到了 Vavr,一个用于 Java 的函数库,它提供了不可变的集合 API。我很想知道拥有不可变队列的原因。
我的理解是,队列用于在一端向其生成数据,然后另一个线程从另一端使用数据。
Immutable Queue 不允许你在构建后添加数据,那我为什么要在这里使用 Queue。
理想情况下,我会按如下方式处理队列,但对于不可变队列,这会进入无限循环。
当我用谷歌搜索时,所有的讨论都围绕着如何实现一个不可变队列,但没有解释它的必要性。
java - 从可选值的供应商序列中提取第一个定义的值(如果有)
给定一个序列Supplier<Option<T>>
——例如,一个方法引用列表——获得第一个定义结果的惯用方法是什么,如果有的话?理想情况下,在第一个成功的结果之后不再调用任何供应商。
我现在拥有的是:
但似乎应该有一种方法可以使平面图更平坦。