在日常的开发工作中,我们有的时候需要构造像Map
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
public class MultimapTest {
Map<String, List<StudentScore>> StudentScoreMap = new HashMap<String, List<StudentScore>>();
@Test
public void testStudentScore(){
for(int i=10;i<20;i++){
StudentScore studentScore=new StudentScore();
studentScore.CourseId=1001+i;
studentScore.score=100-i;
addStudentScore("peida",studentScore);
}
System.out.println("StudentScoreMap:"+StudentScoreMap.size());
System.out.println("StudentScoreMap:"+StudentScoreMap.containsKey("peida"));
System.out.println("StudentScoreMap:"+StudentScoreMap.containsKey("jerry"));
System.out.println("StudentScoreMap:"+StudentScoreMap.size());
System.out.println("StudentScoreMap:"+StudentScoreMap.get("peida").size());
List<StudentScore> StudentScoreList=StudentScoreMap.get("peida");
if(StudentScoreList!=null&&StudentScoreList.size()>0){
for(StudentScore stuScore:StudentScoreList){
System.out.println("stuScore one:"+stuScore.CourseId+" score:"+stuScore.score);
}
}
}
public void addStudentScore(final String stuName,final StudentScore studentScore) {
List<StudentScore> stuScore = StudentScoreMap.get(stuName);
if (stuScore == null) {
stuScore = new ArrayList<StudentScore>();
StudentScoreMap.put(stuName, stuScore);
}
stuScore.add(studentScore);
}
}
class StudentScore{
int CourseId;
int score;
}
说明:想 Map
@Test
public void teststuScoreMultimap(){
Multimap<String,StudentScore> scoreMultimap = ArrayListMultimap.create();
for(int i=10;i<20;i++){
StudentScore studentScore=new StudentScore();
studentScore.CourseId=1001+i;
studentScore.score=100-i;
scoreMultimap.put("peida",studentScore);
}
System.out.println("scoreMultimap:"+scoreMultimap.size());
System.out.println("scoreMultimap:"+scoreMultimap.keys());
}
调用Multimap.get(key)会返回这个键对应的值的集合的视图(view),没有对应集合就返回空集合。对于ListMultimap来说,这个方法会返回一个List,对于SetMultimap来说,这个方法就返回一个Set。修改数据是通过修改底层Multimap来实现的。例如:
@Test
public void teststuScoreMultimap(){
Multimap<String,StudentScore> scoreMultimap = ArrayListMultimap.create();
for(int i=10;i<20;i++){
StudentScore studentScore=new StudentScore();
studentScore.CourseId=1001+i;
studentScore.score=100-i;
scoreMultimap.put("peida",studentScore);
}
System.out.println("scoreMultimap:"+scoreMultimap.size());
System.out.println("scoreMultimap:"+scoreMultimap.keys());
Collection<StudentScore> studentScore = scoreMultimap.get("peida");
studentScore.clear();
StudentScore studentScoreNew=new StudentScore();
studentScoreNew.CourseId=1034;
studentScoreNew.score=67;
studentScore.add(studentScoreNew);
System.out.println("scoreMultimap:"+scoreMultimap.size());
System.out.println("scoreMultimap:"+scoreMultimap.keys());
}
Multimap也支持一系列强大的视图功能:
1.asMap把自身Multimap
@Test
public void teststuScoreMultimap(){
Multimap<String,StudentScore> scoreMultimap = ArrayListMultimap.create();
for(int i=10;i<20;i++){
StudentScore studentScore=new StudentScore();
studentScore.CourseId=1001+i;
studentScore.score=100-i;
scoreMultimap.put("peida",studentScore);
}
System.out.println("scoreMultimap:"+scoreMultimap.size());
System.out.println("scoreMultimap:"+scoreMultimap.keys());
Collection<StudentScore> studentScore = scoreMultimap.get("peida");
StudentScore studentScore1=new StudentScore();
studentScore1.CourseId=1034;
studentScore1.score=67;
studentScore.add(studentScore1);
StudentScore studentScore2=new StudentScore();
studentScore2.CourseId=1045;
studentScore2.score=56;
scoreMultimap.put("jerry",studentScore2);
System.out.println("scoreMultimap:"+scoreMultimap.size());
System.out.println("scoreMultimap:"+scoreMultimap.keys());
for(StudentScore stuScore : scoreMultimap.values()) {
System.out.println("stuScore one:"+stuScore.CourseId+" score:"+stuScore.score);
}
scoreMultimap.remove("jerry",studentScore2);
System.out.println("scoreMultimap:"+scoreMultimap.size());
System.out.println("scoreMultimap:"+scoreMultimap.get("jerry"));
scoreMultimap.put("harry",studentScore2);
scoreMultimap.removeAll("harry");
System.out.println("scoreMultimap:"+scoreMultimap.size());
System.out.println("scoreMultimap:"+scoreMultimap.get("harry"));
}
Multimap的实现
Multimap提供了丰富的实现,所以你可以用它来替代程序里的Map