在尝试将瓦沃尔的不可变映射(io.vavr.collection.HashMap)与java.util.Map接口一起使用时,我没有设法编译代码--至少在io.vavr.collection.HashMap中使用了.of()静态方法。
本质上,这是我使用的Maven依赖项:
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>0.9.2</version>
</dependency>使用Java 1.8
这是密码:
import io.vavr.collection.HashMap;
import java.util.Map;
public class EntityKeyMap {
public static final Map<String, String> map =
HashMap.of("key1", "val1", "key2", "val2", "key3", "val3");
private EntityKeyMap() {
}
}这是我正在犯的错误:
不兼容的类型。必需的映射但“of”被推断为HashMap:不存在变量(S) K,V的实例,以便HashMap符合Map
您对如何将io.vavr.collection.HashMap实例分配给java.util.Map有什么想法吗?这可能吗?
根据io.vavr.collection.HashMap文档,它实现了java.util.Map接口:
https://static.javadoc.io/io.vavr/vavr/0.9.2/io/vavr/collection/HashMap.html
在web上有一些例子似乎是可能的,比如在这个博客上您可以找到以下代码:
Map<String, String> map1
= HashMap.of("key1", "val1", "key2", "val2", "key3", "val3");发布于 2018-08-23 20:33:52
Vavr的HashMap没有实现Map接口。它实现的Map接口是Map接口。
与JDK的Map不同,vavr的Map表示一个不可变的映射,HashMap是一个基于哈希数组映射trie的高效持久映射实现。
JDK Map接口和vavr Map接口之间最基本的区别是,JDK映射有更改映射内部状态的方法,而vavr的方法总是返回一个新的Map实例(或者在映射没有改变时返回相同的实例)。
比较JDK的Map.put和vavr的Map.put方法签名。
Map.put:JDK
V put(K key, V value)将指定的值与此映射中的指定键相关联(可选操作)。如果以前的映射包含键的映射,则旧值将被指定的值替换。(映射m据说包含密钥k的映射当且仅当m.containsKey(k)将返回真。) 返回:与键关联的前一个值,如果没有键映射,则为null。(如果实现支持空值,则空返回还可以指示以前与键关联的映射。)
Map.put vavr
Map<K,V> put(K key, V value)将指定的值与此映射中的指定键关联。如果以前的映射包含键的映射,则旧值将被指定的值替换。 返回:包含这些元素和条目的新映射。
如果需要JDK,可以使用Map.toJavaMap转换vavr映射,但这将创建映射内容的完整副本,因为JDK映射的可变性质与vavr的不可变方法不兼容。
发布于 2018-08-23 08:55:33
正是出于这个目的,有toJavaMap方法:
将此Vavr转换为java.util.Map,同时保留插入顺序(LinkedHashMap)和排序顺序(SortedMap)等特征。
import io.vavr.collection.HashMap;
public class VavrPlayground {
public static final HashMap<String, String> map =
HashMap.of("key1", "val1", "key2", "val2", "key3", "val3");
public void EntityKeyMap() {
java.util.Map<String, String> jMap = map.toJavaMap();
}
}https://stackoverflow.com/questions/51980983
复制相似问题