java - 如何将临时 map 合并到永久 map 上,以便我可以记录同一键的多个项目?

标签 java hashmap

所以我有两个映射,其中键基于单词的长度。每当有一个长度相同的单词时,我希望将它添加到该键中。

我想通过使用 map.merge() 函数来完成此操作,但是,在查看文档后我不确定如何操作。我尝试查看其他资源,但帮助不大。

Map<Integer, String> map = new HashMap<Integer, String>();

Map<Integer, String> map = new HashMap<Integer, String>();


String[] wordsSplit = doc.split(" ");
for(int i = 0; i < wordsSplit.length; i++) {
    int key = wordsSplit[i].length();
    Map<Integer, String> tempMap = new HashMap<Integer, String>();
    tempMap.put(key, wordsSplit[i]);
    //merge here
    map.merge(key, map.keySet(), map.get(key) + ", " + wordsSplit[i]);  
}

编辑:这个问题是不同的,因为在这里我试图弄清楚如何在将临时 map 合并到旧 map 的上下文中进行映射。

例如,这意味着如果有多个项目共享同一个 key ,那么结果会更像是:key: "Car, bar, Tar"

最佳答案

首先你需要一个合并函数来连接相同长度的单词,用", "分隔;

BiFunction<String, String, String> mergeFunction = (i, j) -> {      
    return i + ", " + j;
};

然后 map.merge(key, x, mergeFunction); 根据长度合并 wordsSplit 数组的元素。 key下面是word的长度,x代表wordsSplit[i]

Stream.of(wordsSplit).forEach(x -> {
    int key = x.length();
    map.merge(key, x, mergeFunction);
});

或者你可以直接通过合并函数的主体 (i, j) -> { return i + ", "+ j; }map.merge() 而不是单独定义 mergeFunction:

Stream.of(wordsSplit).forEach(x -> {
    int key = x.length();
    map.merge(key, x, (i, j) -> { return i + ", " + j; });
});

关于java - 如何将临时 map 合并到永久 map 上,以便我可以记录同一键的多个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133636/

相关文章:

java - 如何递减 HashMap 中的值?

java - 是否可以打包通用类?

java - 用于检查 json 文件的 mule 表达式

java - 两个二元矩阵的交错

java - 标记语法错误,错误放置的结构

java - 如何在删除对象之前清除集合

java - Spring Elasticsearch HashMap[String, String] 映射值不能not_analyzed

java - 在 Gradle 插件中获取资源文件的绝对路径?

java - 无法连接到 Cassandra : java. lang.NoSuchMethodError : com. google.common.util.concurrent.Futures.withFallback

ruby-on-rails - Order Hash 并删除第一个键值对