列表中的 Javaslang / Vavr LinkedHashMap
Javaslang / Vavr LinkedHashMap from List
是否有简洁、惯用的方法从 Javaslang/Vavr 创建保序映射 List
? List.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()
。
希望能帮到你。
是否有简洁、惯用的方法从 Javaslang/Vavr 创建保序映射 List
? List.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()
。
希望能帮到你。