需求:在某个班级多名学生,现在需要组成秋游活动,班长提供了四个景点一次是(A,B,C,D),每个学生可以多次选择
在这里我只列举了三个学生,方法都是一样的,多个学生直击放个扫描器输入即可
package Map集合案例;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test2 {
public static void main(String[] args) {
//第一个个String表示学生的姓名,第二个参数表示学生选择的旅游景点
Map<String, List<String>> m=new HashMap<>();
//测试添加3个同学
//第一个
List<String> list=new ArrayList();
Collections.addAll(list, "A","C");
m.put("张三", list );
//第二个
List<String> list2=new ArrayList<>();
Collections.addAll(list2, "A","B","C");
m.put("李四", list2);
//第四个
List<String> list3=new ArrayList<>();
Collections.addAll(list3, "C","D");
m.put("王五", list3);
System.out.println(m); //输出{李四=[A, B, C], 张三=[A, C], 王五=[C, D]}
//开始统计
Map<String, Integer> m2=new HashMap<>();
//把投的票提取出来
Collection<List<String>> ss=m.values();
System.out.println(ss);//取出成功输出[[A, B, C], [A, C], [C, D]]
//开始遍历
for (List<String> out: ss) {
for (String in : out) {
//判断
if(m2.containsKey(in)==true) {
//如果存在那么直接给值加1即可
m2.put(in, m2.get(in)+1);
}
else if (m2.containsKey(in)==false) {
//如果键不存在,直接键和值为1即可
m2.put(in, 1);
}
}
}
System.out.println(m2);
//输出{A=2, B=1, C=3, D=1}模拟统计完成
}
}
全部的输入如下
{李四=[A, B, C], 张三=[A, C], 王五=[C, D]}
[[A, B, C], [A, C], [C, D]]
{A=2, B=1, C=3, D=1}
因为都是嵌套关系,所以都要使用二层循环进行遍历
里面用到的API
Collections.addAll (参数1是你的集合,1,2,3....);
后面的参数是,一起添加到集合的元素
Map.get(Key) 根据键取值
Map.containsKey(Key) ,判断键是否存在