Java-类库-Guava-Multimap

来源:互联网 发布:重力感应效果 js 编辑:程序博客网 时间:2024/06/06 01:03

在日常的开发工作中,我们有的时候需要构造像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

0 0