Java中如何实现多个对应同一公共值的键的统一输出?
解决Java中同一值对应多键的合并输出问题
你当前的代码逻辑是把每个键值对单独处理,直接将单个键与值拼接后加入集合,所以每个Entry都会生成一条独立记录,自然无法实现同一值对应多键的合并输出。
修正方案
核心思路是先构建反向映射:以原Map的值作为键,将对应的所有原键收集到列表中,之后再遍历这个反向映射生成目标格式的输出。
完整代码示例
import java.util.*; public class PatientDemo { public static void main(String[] args) { Map<String, String> patients = new HashMap<>(); patients.put("555", "Adam"); patients.put("666", "Adam"); patients.put("66r", "PAM"); // 构建「值 -> 对应键列表」的反向映射 Map<String, List<String>> valueToKeys = new HashMap<>(); for (Map.Entry<String, String> entry : patients.entrySet()) { // 简化判断:如果当前值不存在映射,自动创建新列表;否则直接添加键 valueToKeys.computeIfAbsent(entry.getValue(), k -> new ArrayList<>()).add(entry.getKey()); } // 生成并打印目标格式 for (Map.Entry<String, List<String>> entry : valueToKeys.entrySet()) { System.out.println(entry.getKey() + " - " + String.join(",", entry.getValue())); } } }
输出结果
Adam - 555,666 PAM - 66r
内容的提问来源于stack exchange,提问作者DAN
相关产品推荐
相关产品推荐

