列表中的 Javaslang / Vavr LinkedHashMap

Javaslang / Vavr LinkedHashMap from List

是否有简洁、惯用的方法从 Javaslang/Vavr 创建保序映射 ListList.toMap() returns 一个普通的 HashMap,所以那行不通。我现在拥有的是这样的 --

listOfKeys.foldLeft(
    LinkedHashMap.<Key, Value>.empty(), 
    (m, k) -> m.put(k, valueFor(k))
);

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

Value.collect method (inherited by List) is usually used for this purpose, which is analogous to the Java 8 Stream's collect method. It takes a collector to perform a mutable reduction (see note). Vavr LinkedHashMap provides a static collector() 方法,因此您可以使用它来获取收集器的实例,该收集器将收集到 LinkedHashMap

listOfKeys.map(key -> new Tuple2<>(key, valueForKey(key)))
    .collect(LinkedHashMap.collector());

我不确定与您的解决方案相比它的性能如何,我认为它在性能上不会有差异,但作为额外的好处,它与 JDK 收集器兼容,所以您可以使用它轻松收集到 JDK collections。

* 请注意,由于 Vavr collections 是不可变的,因此 可变缩减 在这种情况下实际上并不可变。

现在好像有一个toLinkedMap()。 希望能帮到你。