
package com.itheima.d9_map_impl;
import java.util.*;
/**
* 需求: 统计投票人数
*/
public class MapTest4 {
public static void main(String[] args) {
// 1. 要求程序记录每个学生选择的情况
// 使用一个Map集合存储
// 该HashMap集合的键是字符串类型 值是:字符串的集合)用来存储学生投票的数据(投票结果)
Map<String, List<String>> data = new HashMap<>(); // 这是一种嵌套类型的集合
// 2. 把学生选择的数据存入进去
List<String> selects = new ArrayList<>(); // ArrayList集合是[] 中括号
Collections.addAll(selects,"A", "C"); // 将元素A和C存入到selects集合中去
data.put("罗勇",selects); // 罗勇投了 “A”,"C"
System.out.println(data); //{罗勇=[A, C]}
List<String> selects2 = new ArrayList<>(); // ArrayList集合是[] 中括号
Collections.addAll(selects2,"B", "C","D"); //
data.put("胡涛",selects2); //
System.out.println(data); //{胡涛=[B, C, D], 罗勇=[A, C]}
List<String> selects3 = new ArrayList<>(); // ArrayList集合是[] 中括号
Collections.addAll(selects3,"A", "B","C","D"); // 将元素A和C存入到selects集合中去
data.put("刘军",selects3); //
System.out.println(data); // {刘军=[A, B, C, D], 胡涛=[B, C, D], 罗勇=[A, C]}
// 3. 统计每个景点的信息 ABCD 四个景点所对应的键值对,存储在集合中
// {A=2, B=2, C=3, D=2} 这是最后输出的结构
Map<String,Integer> infos = new HashMap<>(); // 当前是空集合
// 4. 提取所有人选择的景点信息 //
System.out.println(data.values()); //[[A, B, C, D], [B, C, D], [A, C]]
// 返回该键的值 (得到的是一个集合)所以用Collection接口接收,但是集合里面嵌套了集合,所以要用Collection<List<String>>
Collection<List<String>> values = data.values(); // 返回该键的值 (得到的是一个集合)
// values = [[A, B, C, D], [B, C, D], [A, C]]
// value
for (List<String> value : values) {
// 遍历出来的每个元素都是个集合
// 然后将每个元素(集合) 继续遍历 集合名.for
for (String s : value) { // 遍历出来该景点
// 判断有没有包含这个景点
if (infos.containsKey(s)){// 判断该键中是否包含该景点
infos.put(s, infos.get(s) + 1); // 如果包含该景点则继续添加该元素,让该value+1,刷新值
}else {
infos.put(s, 1); // 如果不存在,则重新放入 s ,值为1
}
}
}
System.out.println(infos); //{A=2, B=2, C=3, D=2}
}
}