是否有一种简洁,惯用的方式来创建来自Javaslang / Vavr List
的订单保留地图? List.toMap()
返回普通HashMap
,因此不会这样做。我现在拥有的是这样的东西 -
listOfKeys.foldLeft(
LinkedHashMap.<Key, Value>.empty(),
(m, k) -> m.put(k, valueFor(k))
);
- 但这似乎比必要的更冗长,也可能效率更低。
答案 0 :(得分:5)
Value.collect
方法(由List
继承)通常用于此目的,类似于Java 8 Stream的collect
方法。收集器需要执行可变缩减(参见注释)。 Vavr LinkedHashMap
提供静态collector()
方法,因此您可以使用该方法将实例收集到将收集到LinkedHashMap
的收集器。
listOfKeys.map(key -> new Tuple2<>(key, valueForKey(key)))
.collect(LinkedHashMap.collector());
我不确定它与您的解决方案相比会如何表现,但我认为它不会在性能上有所不同,但作为额外奖励,它与JDK收藏家兼容,因此您可以使用它轻松地收集到JDK集合。
*请注意,由于Vavr集合是不可变的,因此 mutable reduction 在这种情况下实际上并不可变。
答案 1 :(得分:1)
现在似乎有一个toLinkedMap()
。
希望它能在这里提供帮助。