
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} }}