【问题标题】:Javaslang / Vavr LinkedHashMap from List列表中的 Javaslang / Vavr LinkedHashMap
【发布时间】:2017-05-25 18:44:12
【问题描述】:

有没有一种简洁、惯用的方法来从 Javaslang / Vavr List 创建一个保持顺序的映射? List.toMap() 返回一个普通的 HashMap,所以它不会这样做。我现在拥有的是这样的——

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

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

【问题讨论】:

    标签: list linkedhashmap vavr


    【解决方案1】:

    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 集合是不可变的,可变归约 在这种情况下实际上并不可变。

    【讨论】:

      【解决方案2】:

      现在好像有toLinkedMap()。 希望对这里有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多