image.png

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