如何在Java中为Guava Multimap的所有键添加单个值
给Guava Multimap的所有键统一添加指定条目
这问题我之前在项目里也碰到过,Guava的Multimap提供了很灵活的操作方式,下面给你几种实用的实现方案:
遍历键集合逐个添加(基础通用版)
最直观的方式就是获取Multimap的所有键,然后循环给每个键添加"reptile"条目,代码如下:final Multimap<Integer, String> myMap = HashMultimap.create(); myMap.put(0, "snake"); myMap.put(1, "crocodile"); myMap.put(2, "turtle"); // 核心操作:遍历所有键添加条目 for (Integer key : myMap.keySet()) { myMap.put(key, "reptile"); } // 验证结果 System.out.println(myMap); // 输出 {0=[snake, reptile], 1=[crocodile, reptile], 2=[turtle, reptile]}这个方法兼容性极强,不管你用的是哪种Multimap实现(HashMultimap、TreeMultimap等)都能正常工作,而且逻辑清晰,新手也能一眼看懂。
Java 8+流式写法(简洁版)
如果你的项目用的是Java 8及以上版本,可以用Lambda表达式结合forEach来简化代码,一行就能完成核心操作:// 核心操作:用forEach遍历键集合 myMap.keySet().forEach(key -> myMap.put(key, "reptile"));这种写法更简洁优雅,代码量少,适合追求代码简洁性的场景。
不修改原Map的场景(复制后操作)
如果需要保留原始Multimap的数据,不想改动它,那可以先复制一份原Map,再给新Map的所有键添加条目:// 复制原Multimap到新实例 Multimap<Integer, String> newMap = HashMultimap.create(myMap); // 给新Map添加条目 newMap.keySet().forEach(key -> newMap.put(key, "reptile")); // 原Map不受影响 System.out.println(myMap); // 输出 {0=[snake], 1=[crocodile], 2=[turtle]} // 新Map是目标结果 System.out.println(newMap); // 输出 {0=[snake, reptile], 1=[crocodile, reptile], 2=[turtle, reptile]}
以上几种方式都能完美实现你想要的效果,你可以根据自己的代码风格和业务需求来选择合适的方案~
内容的提问来源于stack exchange,提问作者Arcadian
相关产品推荐
相关产品推荐

