Java中从函数内获取Map条目并拼接为字符串的实现咨询
实现指引
你当前的代码仅执行了map.get操作,未保存、传递获取到的取值,因此无法完成拼接。以下是可直接落地的实现方案:
前提假设
你已提前初始化好存储所有哈希码对应字符串的静态Map,示例如下:
import java.util.HashMap; import java.util.Map; public class MessageBuilder { private static final Map<Integer, String> map = new HashMap<>(); // 静态代码块提前存入所有键值对 static { map.put(97, "对应字符串1"); map.put(3159, "对应字符串2"); // 剩余所有用到的哈希码都在此处完成put操作 } }
推荐实现方案:传参式拼接
给所有涉及map.get的方法增加StringBuilder类型的入参,每次取值后直接追加到拼接容器中,嵌套调用时将容器一路传递即可,改造成本最低,且线程安全。
改造后的完整代码如下:
// 入口方法,调用后直接返回拼接完成的完整句子 public static String secondMessage() { // 方法内局部初始化拼接容器,避免多线程冲突 StringBuilder sentenceBuilder = new StringBuilder(); aab(sentenceBuilder); // 若需要拼接间隔(如空格、标点),可追加.append(" ") sentenceBuilder.append(map.get(97)); aba(sentenceBuilder); cbc(sentenceBuilder); cbb(sentenceBuilder); sentenceBuilder.append(map.get(3159)); ccc(sentenceBuilder); return sentenceBuilder.toString(); } public static void ccc(StringBuilder sentenceBuilder) { bab(sentenceBuilder); bcc(sentenceBuilder); } public static void aba(StringBuilder sentenceBuilder) { sentenceBuilder.append(map.get(2301506)); } public static void abb(StringBuilder sentenceBuilder) { sentenceBuilder.append(map.get(3540684)); } public static void aab(StringBuilder sentenceBuilder) { sentenceBuilder.append(map.get(-1079530081)); } public static void baa(StringBuilder sentenceBuilder) { sentenceBuilder.append(map.get(3139)); } public static void bba(StringBuilder sentenceBuilder) { sentenceBuilder.append(map.get(98256)); } public static void cbb(StringBuilder sentenceBuilder) { sentenceBuilder.append(map.get(3540684)); } public static void bcc(StringBuilder sentenceBuilder) { sentenceBuilder.append(map.get(-103839003)); } public static void cbc(StringBuilder sentenceBuilder) { sentenceBuilder.append(map.get(-309387644)); } public static void bab(StringBuilder sentenceBuilder) { abb(sentenceBuilder); bba(sentenceBuilder); baa(sentenceBuilder); }
可选实现方案:返回值式拼接
如果不想额外传参,可以把所有涉及map.get的方法改为返回获取到的字符串,上层调用时累加拼接即可,示例片段如下:
public static String secondMessage() { StringBuilder sb = new StringBuilder(); sb.append(aab()); sb.append(map.get(97)); sb.append(aba()); sb.append(cbc()); sb.append(cbb()); sb.append(map.get(3159)); sb.append(ccc()); return sb.toString(); } public static String ccc() { return bab() + bcc(); } public static String aba() { return map.get(2301506); } // 剩余所有方法同理改造,嵌套调用的方法将子调用的返回值拼接后返回即可
注意事项
- 要提前确保所有用到的哈希码都已存入Map,否则
get会返回null,拼接时会出现null字符串,可增加空值判断避免:sentenceBuilder.append(map.get(key) == null ? "" : map.get(key)) - 若需要增加拼接间隔(如空格、逗号),只需在每次
append取值后追加对应字符即可,例如sentenceBuilder.append(map.get(key)).append(" ")
内容的提问来源于stack exchange,提问作者Joshcampbell7
相关产品推荐
相关产品推荐

