如何将临时映射合并到永久映射,以便可以记录同一密钥的多个项目?

时间:2018-11-03 17:11:07

标签: 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]);  
}

编辑:这个问题有所不同,因为在这里我试图弄清楚如何在将临时地图合并到旧地图的情况下进行地图绘制。

例如,这意味着如果有多个项目共享同一密钥,那么结果将更多为:密钥:"Car, bar, Tar"

1 个答案:

答案 0 :(得分:3)

首先,您需要一个合并功能来合并长度相同的单词,并用", "分隔;

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

然后map.merge(key, x, mergeFunction);根据其长度合并wordsSplit数组的元素。在key下面是字长,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; });
});