遍历两个Map,修改键替换逻辑并拆分Mapa键的技术求助
解决方法:拆分替换后的Map键并生成新键值对
首先得指出你原代码里的一个小问题:你在mapa.forEach里修改key变量是不会改变原Map的键的——因为Map的键是不可变的,forEach里的key只是原键的一个局部副本,修改它对原Map没有任何影响。所以我们需要创建一个新的Map来存储处理后的结果。
根据你的需求,我们要先把原键的单词替换,再将替换后的键拆分为"c c"和"bat"两部分(也就是从最后一个空格处分割),然后把这两个新键都关联原有的值。具体代码如下:
import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; public class MapProcessing { public static void main(String[] args) { // 初始化你的两个Map Map<String, String> mapa = new HashMap<>(); mapa.put("cat cat bat", "45"); Map<String, String> mapb = new HashMap<>(); mapb.put("cat", "c"); // 创建新Map存储处理后的结果 Map<String, String> processedMap = new HashMap<>(); mapa.forEach((originalKey, value) -> { // 第一步:按原逻辑替换键中的单词 String replacedKey = Arrays.stream(originalKey.split(" ")) .map(word -> mapb.getOrDefault(word.trim(), word.trim())) .collect(Collectors.joining(" ")); // 第二步:将替换后的键从最后一个空格处拆分为两部分 int lastSpacePos = replacedKey.lastIndexOf(" "); if (lastSpacePos != -1) { String firstPart = replacedKey.substring(0, lastSpacePos); String secondPart = replacedKey.substring(lastSpacePos + 1); // 将两个新键关联原value存入结果Map processedMap.put(firstPart, value); processedMap.put(secondPart, value); } else { // 处理替换后无空格的边界情况 processedMap.put(replacedKey, value); } }); // 输出结果:{c c=45, bat=45} System.out.println(processedMap); } }
代码说明:
- 替换逻辑:和你原代码一致,用
mapb里的映射替换原键中的每个单词,没有匹配到的单词保持原样 - 拆分逻辑:通过
lastIndexOf(" ")找到最后一个空格的位置,把替换后的键拆分为前半部分(c c)和后半部分(bat) - 结果存储:把拆分后的两个新键都关联原Map中的值,存入新的
processedMap中
如果你的拆分规则不是按最后一个空格,而是其他规则(比如按单个空格拆分成所有单词),只需要调整拆分的逻辑即可。比如要拆成单个单词的话,直接把replacedKey.split(" ")得到的数组遍历存入新Map就行。
内容的提问来源于stack exchange,提问作者Ilak
相关产品推荐
相关产品推荐

