Java中如何遍历Multimap特定键对应的所有值?
遍历Multimap特定键的所有值
没问题!遍历Multimap里某个特定键的所有值其实超简单~不同常用的Multimap实现(比如Guava或者Apache Commons的)都有现成的方法,我给你举几个实用的例子:
一、Guava Multimap(最常用的实现)
Guava的Multimap应该是日常开发里用得最多的了,它提供了get(key)方法,直接就能拿到这个键对应的所有值的集合(可能是List、Set这类,取决于你创建的Multimap类型),拿到集合后直接遍历就行:
import com.google.common.collect.Multimap; import com.google.common.collect.ArrayListMultimap; public class MultimapDemo { public static void main(String[] args) { // 创建一个ArrayListMultimap,键对应的值是有序列表 Multimap<String, String> snackMultimap = ArrayListMultimap.create(); snackMultimap.put("snack", "chips"); snackMultimap.put("snack", "cookie"); snackMultimap.put("snack", "candy"); snackMultimap.put("drink", "soda"); // 获取特定键"snack"的所有值 Collection<String> snacks = snackMultimap.get("snack"); // 普通for循环遍历 for (String snack : snacks) { System.out.println("爱吃的零食:" + snack); } // 也可以用Lambda表达式简化遍历 snacks.forEach(snack -> System.out.println("Lambda遍历:" + snack)); } }
小提示:get(key)方法很贴心,不管键是否存在,都会返回一个非null的集合——如果键没有对应值,就返回空集合,完全不用担心空指针异常~
二、Apache Commons Collections Multimap
如果你用的是Apache Commons的Multimap,思路也是一样的,用get(key)拿到值集合后遍历:
import org.apache.commons.collections4.Multimap; import org.apache.commons.collections4.map.MultiValueMap; public class ApacheMultimapDemo { public static void main(String[] args) { Multimap<String, String> petMultimap = new MultiValueMap<>(); petMultimap.put("pet", "dog"); petMultimap.put("pet", "cat"); petMultimap.put("pet", "hamster"); // 获取特定键的所有值 Collection<String> pets = petMultimap.get("pet"); // 遍历输出 for (String pet : pets) { System.out.println("家里的宠物:" + pet); } } }
三、自定义Multimap的情况
如果你是自己实现的Multimap,核心思路也没变:根据键找到对应的容器(比如List、Set),然后直接遍历这个容器就可以了~另外要注意,如果遍历过程中需要修改值,最好用迭代器的remove()方法,或者用线程安全的实现,避免并发修改异常哦。
内容的提问来源于stack exchange,提问作者blah_crusader
相关产品推荐
相关产品推荐

