Guava学习——集合Multimap
2015-11-14 21:54
316 查看
在实际业务中,可能会遇到这样的情况,一个Key对应多个Value,比如学校与班级,班级与学生;于是有了下面的代码:
OK,现在开始维护这个数据结构——Map < Object,List>,常规的put,delete操作:
还有get、contains操作,可以想象维护工作是多么的痛苦! 还好Guava提供了一个数据结构Multimap,通过它,我们可以方便的管理、使用这样的多个key/value映射的情况。
下面看下它的结构:
使用它来完成上面的情景:
{ Map<Grade, List<Student>> gradeStudents; Map<School, List<Grade>> schoolGrades; } class Student {} class School {} class Grade {}
OK,现在开始维护这个数据结构——Map < Object,List>,常规的put,delete操作:
public void put(Grade grade, Student student) { List<Student> studentList; if (!gradeStudents.containsKey(grade)) { studentList = Lists.newArrayList(); } else { studentList = gradeStudents.get(grade); } if (!studentList.contains(student)) { studentList.add(student); } gradeStudents.put(grade, studentList); } public void remove(Grade grade,Student student){ if(gradeStudents.containsKey(grade)){ List<Student> studentList = gradeStudents.get(grade); studentList.remove(student); } }
还有get、contains操作,可以想象维护工作是多么的痛苦! 还好Guava提供了一个数据结构Multimap,通过它,我们可以方便的管理、使用这样的多个key/value映射的情况。
下面看下它的结构:
使用它来完成上面的情景:
Multimap<Grade, Student> multimap = HashMultimap.create(); Grade grade = new Grade(); Student student = new Student(); //新增 multimap.put(grade, student); //删除一个映射 multimap.remove(grade, student); //删除所有grade映射 multimap.removeAll(grade); //获得grade所有的映射 Collection<Student> students = multimap.get(grade); for (Student s : students) { System.out.println(s); }
相关文章推荐
- 重复制造轮子之——字节数组写入文件
- Guava学习总结之- 1 - Basic Utilities - Optional
- Guava学习总结之- 2 - Basic Utilities - Precondition
- Guava学习总结之- 3 - Basic Utilities - Ordering
- Guava学习总结之- 4 - Basic Utilities - Object methods
- Guava学习总结之 - 6 - Collections - Immutable collections
- Guava学习总结之 - 7 - Collections - New collection types
- 分数排名、排序处理
- 依据分数范围划定等级
- MultiMap 的作用
- Guava简介
- Guava学习笔记(一)
- STL中Multimap的一个例子
- Google Guava学习笔记
- guava cache学习
- multimap(一个键值对应多个值)的应用
- 使用 Google Guava 美化你的 Java 代码:1~4
- guava 学习笔记1---使用瓜娃(guava)的选择和预判断使代码变得简洁
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用