来自List的Javaslang / Vavr LinkedHashMap

时间:2017-05-25 18:44:13

标签: list linkedhashmap vavr

是否有一种简洁,惯用的方式来创建来自Javaslang / Vavr List的订单保留地图? List.toMap()返回普通HashMap,因此不会这样做。我现在拥有的是这样的东西 -

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

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

2 个答案:

答案 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()。 希望它能在这里提供帮助。