Javaslang/Vavr如何从列表创建LinkedHashMap

4
有没有一个简洁的、惯用的方法可以从 Javaslang / Vavr 的 List 创建一个保持顺序的映射表?List.toMap() 方法返回一个普通的 HashMap,所以这并不能做到。目前我手头的方法是这样的 -
listOfKeys.foldLeft(
    LinkedHashMap.<Key, Value>.empty(), 
    (m, k) -> m.put(k, valueFor(k))
);

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

2个回答

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集合是不可变的,因此在此上下文中,“可变规约”实际上并非可变。

1

现在似乎有一个toLinkedMap()。希望它能在这里有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接