由Guava提供的类,可以让键一次可被映射到多个值(多个value共用一个key),也可以理解为”键-单个值映射”的集合。
如果原来工作中要实现:
a -> 1
a -> 2
a ->3
那么Multimap类就是
a -> [1, 2, 3]
创建Multimap
Multimap<key, value> multimap= ArrayListMultimap.create();
(还有HashMultimap、LinkedListMultimap、LinkedHashMultimap、TreeMultimap等实现类)
例如,在写一个班级的管理页面,要求点击班级可以显示出班级下的所有学生,可以以班级的name为key(如3年2班),将一个班级下的所有学生为value存到一个Multimap类中,这样方便我们遍历一个班级下的所有学生.
Multimap<Integer, Student> classStudentMap = ArrayListMultimap.create();
List<Student> students = Lists.newArrayList();
for(Student student : students ){
classStudentMap (student .getclassName,student );
}
Multimap还提供了诸如remove(K, V)、removeAll(K)、replaceValues(K, Iterable<V>)之类的方法,总之是个很强大很实用的类
但Multimap并不是map,可以使用asMap()视图获取一个Map<K, Collection<V>>。(或者用静态方法Multimaps.asMap()为ListMultimap返回一个Map<K, List<V>>。
Multimap.size()返回所有”键-单个值映射”的个数,而非不同键的个数。要得到不同键的个数,请改Multimap.keySet().size()。
网友评论