2017-05-25 36 views
3

有没有一种简洁,惯用的方法来从Javaslang/Vavr创建一个保存顺序图?ListList.toMap()返回一个普通的HashMap,所以不这样做。我现在所拥有的是这样的 -来自列表的Javaslang/Vavr LinkedHashMap

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

- 但这看起来比必要的更冗长,也可能效率更低。

回答

4

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