首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用io.vavr.collection.HashMap的映射接口?

是否可以使用io.vavr.collection.HashMap的映射接口?
EN

Stack Overflow用户
提问于 2018-08-23 08:03:20
回答 2查看 1.2K关注 0票数 1

在尝试将瓦沃尔的不可变映射(io.vavr.collection.HashMap)与java.util.Map接口一起使用时,我没有设法编译代码--至少在io.vavr.collection.HashMap中使用了.of()静态方法。

本质上,这是我使用的Maven依赖项:

代码语言:javascript
复制
<dependency>
    <groupId>io.vavr</groupId>
    <artifactId>vavr</artifactId>
    <version>0.9.2</version>
</dependency>

使用Java 1.8

这是密码:

代码语言:javascript
复制
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上有一些例子似乎是可能的,比如在这个博客上您可以找到以下代码:

代码语言:javascript
复制
Map<String, String> map1
  = HashMap.of("key1", "val1", "key2", "val2", "key3", "val3");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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.putJDK

代码语言:javascript
复制
V put(K key, V value)

将指定的值与此映射中的指定键相关联(可选操作)。如果以前的映射包含键的映射,则旧值将被指定的值替换。(映射m据说包含密钥k的映射当且仅当m.containsKey(k)将返回真。) 返回:与键关联的前一个值,如果没有键映射,则为null。(如果实现支持空值,则空返回还可以指示以前与键关联的映射。)

Map.put vavr

代码语言:javascript
复制
Map<K,V> put(K key, V value)

将指定的值与此映射中的指定键关联。如果以前的映射包含键的映射,则旧值将被指定的值替换。 返回:包含这些元素和条目的新映射。

如果需要JDK,可以使用Map.toJavaMap转换vavr映射,但这将创建映射内容的完整副本,因为JDK映射的可变性质与vavr的不可变方法不兼容。

票数 4
EN

Stack Overflow用户

发布于 2018-08-23 08:55:33

正是出于这个目的,有toJavaMap方法:

将此Vavr转换为java.util.Map,同时保留插入顺序(LinkedHashMap)和排序顺序(SortedMap)等特征。

代码语言:javascript
复制
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();
   }

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51980983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档