所以我有两个映射,其中键基于单词的长度。每当有一个长度相同的单词时,我希望将它添加到该键中。
我想通过使用 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/