人口数据统计

    USERID  GENDER  BIRTHDAY    EDU JOB INCOME  PROVINCE    CITY    ISCITY
    13F320E7B5EAD1024AC95C3B208610DB    男   1981    高中/中专/技校    企业/公司一般职员   1501~2000元  内蒙古 呼和浩特    unknown
    EA3502C3594588F0E9D5142F99C66627    女   1989    大学本科    学生  无收入 浙江  嘉兴  unknown
    1134AC57B5B1D38B7D70C1B6FEAA28CF    男   1995    初中  学生  无收入 广东  汕头  城市
    A660D4563B8F62DD5282319CC643D950    男   1979    初中  企业/公司一般职员   2001~3000元  上海  嘉定  乡村
    23CE1851341EC1FA9E0C259DE10BF87C    男   1995    高中/中专/技校    学生  无收入 江西  吉安  城市

需求:
1.统计各个省份的人员的平均年龄
2 统计各个省份的男女比例
3 统计所有数据中的城市和农村户口比例
4 统计所有大专以上学历的人口比

分析:

  • 第一和第二题可以放在一起做,都是各个省份的XXX,此时可以new Map,key存省份,value存UserBean(包含用户的所有信息)的List集合

    • 对map进行遍历,每个省对应的User年龄做加法,除以list的长度就得到平均年龄
    • 男女比例分别用Stream里面的筛子提取出来,返回一个list集合
  • 第三题,new Map ,key存city(城市/农村/城郊),value是UserBean的list集合

  • 第三题 : 声明两个值count/countedu count—总人口 ,countedu —大专以上人口,在读取的while循环中就可以求出两个值

代码如下:

    public static void main(String[] args) throws Exception {
    //1.key各个省份 ,value 对应的UserBean集合
    //2.统计各个省份的男女比例
    Map<String, List<UserBean>> isProvinceMap = new HashMap<>();
    //按城市 农村 储存数据
    Map<String, List<UserBean>> isCityMap = new HashMap<>();


    BufferedReader br = new BufferedReader(new FileReader("d:/data/demographic.txt"));
    //大专以上人口数
    int countedu = 0;
    //总人数
    int count = 0;
    //第一行数据弃用
    br.readLine();
    String line;
    while((line = br.readLine())!=null) {
        //当读取的line不是空的时候,对数据进行操作
        if (line.length()>0) {
            count++;
            String[] split = line.split("\\s+");
            String userId = split[0];
            String gender = split[1];
            String birthday = split[2];
            String edu = split[3];
            String job = split[4];
            String inCome = split[5];
            String province = split[6];
            String city = split[7];
            String isCity = split[8];
            //对birthday简单处理
            int age = 2018 - Integer.parseInt(birthday);
            //自定义的UserBean
            UserBean bean = new UserBean(userId, gender, age, edu, job, inCome, province, city, isCity);
            List<UserBean> list = isProvinceMap.getOrDefault(province, new ArrayList<>());
            list.add(bean);
            isProvinceMap.put(province, list);//得到省份
            List<UserBean> list2 = isCityMap.getOrDefault(isCity, new ArrayList<>());
            list2.add(bean);
            isCityMap.put(isCity, list2);//得到city为key的Map
            if ("大专".equals(edu) || "大学本科".equals(edu) || "硕士及以上".equals(edu)) {
                countedu++;
            } 
        }
    }
    //统计各个省份的人员的平均年龄和男女比例
    getAgeandGerder(isProvinceMap);
    //统计所有数据中的城市和农村户口比例
    getChengshiNongcunBiLi(isCityMap);

    System.out.println(count);
    System.out.println(countedu);
    System.out.println("所有大专以上学历的人口比"+1.0*countedu/count);
    br.close();
}

private static void getChengshiNongcunBiLi(Map<String, List<UserBean>> isCityMap) {
    List<UserBean> list = isCityMap.get("城市");
    List<UserBean> list2 = isCityMap.get("乡村");
    double res = 1.0*list.size()/list2.size();
    System.out.println(res);
}

private static void getAgeandGerder(Map<String, List<UserBean>> isProvinceMap) {
    Set<Entry<String, List<UserBean>>> set = isProvinceMap.entrySet();
    for (Entry<String, List<UserBean>> entry : set) {
        //男性用户的集合
        List<UserBean> manCollect = entry.getValue().stream().filter(o->"男".equals(o.getGender())).collect(Collectors.toList());
        //女性用户的集合
        List<UserBean> femaleCollect = entry.getValue().stream().filter(o->"女".equals(o.getGender())).collect(Collectors.toList());
        double res = 1.0*manCollect.size()/femaleCollect.size();
        System.out.println(entry.getKey()+"省的男女比例是:"+res);

        Integer sum = entry.getValue().stream().map(o->o.getage()).reduce((o1,o2)->o1+o2).get();
        double res1 = 1.0*sum/entry.getValue().size();
        System.out.println(entry.getKey()+"省的平均年龄:"+res1);
        System.out.println("-----------------------------------");
    }
}
//UserBean,后面的getters/setters,构造方法就省略了,都是可以自动生成的
public class UserBean {
    private String userId;
    private String gender;
    private int age;
    private String edu;
    private String job;
    private String inCome;
    private String province;
    private String city;
    private String isCity;
    ......}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值