分享一个之前面试的一个基础编程题

/**
 * 要求对这组数据进行数据转换和计算处理,按照日期(精确到天)和病人分类数据, 用控制台输出即可
 * 输出示例:
 * 		2020-01-23 2020-01-24 2020-01-25 2020-01-26
 * 张三   36.5       36.3       ...         ...       36.33(最后一列平均温度)
 * ...     ...       ...        ...         ...
 * 要求:
 * 1. 日期从小到大输出,
 * 2. 如果病人当日没有测试温度, 统一认为是 36.5 摄氏度(在控制台打出36.5)
 * 3. 计算平均温度
 * patientList只是参考数据,请不要写死
 *
 * @author lxx
 * @create 2021-02-28 17:10
 */

public class Demo1 {
    public static void main(String[] args) {
        List<PatientTemperatureVo> list = getPatientList();
        
    }

    static class PatientTemperatureVo {
        public String name;
        public String dateStr;
        public double temperature;

        public PatientTemperatureVo() {
        }

        public PatientTemperatureVo(String name, String dateStr, double temperature) {
            this.name = name;
            this.dateStr = dateStr;
            this.temperature = temperature;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getDateStr() {
            return dateStr;
        }

        public void setDateStr(String dateStr) {
            this.dateStr = dateStr;
        }

        public double getTemperature() {
            return temperature;
        }

        public void setTemperature(double temperature) {
            this.temperature = temperature;
        }

        @Override
        public String toString() {
            return "PatientTemperatureVo{" +
                    "name='" + name + '\'' +
                    ", dateStr='" + dateStr + '\'' +
                    ", temperature=" + temperature +
                    '}';
        }
    }

    static List<PatientTemperatureVo> getPatientList() {
        List<PatientTemperatureVo> list = new ArrayList<>();
        list.add(new PatientTemperatureVo("赵六", "2020-01-25 12:13:26", 37.2));
        list.add(new PatientTemperatureVo("王五", "2020-01-25 12:13:26", 36.5));
        list.add(new PatientTemperatureVo("张三", "2020-01-24 12:25:26", 36.2));
        list.add(new PatientTemperatureVo("李四", "2020-01-25 12:24:26", 36.5));
        list.add(new PatientTemperatureVo("李四", "2020-01-24 21:13:25", 36.9));
        list.add(new PatientTemperatureVo("张三", "2020-01-25 11:13:26", 36.7));
        list.add(new PatientTemperatureVo("张三", "2020-01-27 12:13:26", 36.3));
        list.add(new PatientTemperatureVo("张三", "2020-01-28 12:35:23", 36.4));
        list.add(new PatientTemperatureVo("李四", "2020-01-27 13:15:26", 37));
        list.add(new PatientTemperatureVo("李四", "2020-01-23 15:13:26", 36.6));
        list.add(new PatientTemperatureVo("赵六", "2020-01-24 12:13:26", 36.9));
        list.add(new PatientTemperatureVo("王五", "2020-01-27 12:25:54", 36.4));
        list.add(new PatientTemperatureVo("李四", "2020-01-26 12:13:26", 36.2));
        list.add(new PatientTemperatureVo("李四", "2020-01-28 19:13:26", 36.1));
        list.add(new PatientTemperatureVo("黄七", "2020-01-23 12:13:26", 36.9));
        list.add(new PatientTemperatureVo("黄七", "2020-01-26 06:13:26", 37.5));
        list.add(new PatientTemperatureVo("王五", "2020-01-23 12:13:26", 36.2));
        list.add(new PatientTemperatureVo("王五", "2020-01-24 18:13:21", 36.9));
        list.add(new PatientTemperatureVo("刘八", "2020-01-26 12:13:26", 36.8));
        list.add(new PatientTemperatureVo("黄七", "2020-01-25 12:13:26", 37.2));
        list.add(new PatientTemperatureVo("黄七", "2020-01-28 12:13:26", 35.9));
        list.add(new PatientTemperatureVo("赵六", "2020-01-26 12:14:26", 37.5));
        list.add(new PatientTemperatureVo("刘八", "2020-01-25 17:13:23", 36.5));
        list.add(new PatientTemperatureVo("王五", "2020-01-26 12:13:26", 36.8));
        list.add(new PatientTemperatureVo("王五", "2020-01-28 12:13:26", 36.1));
        list.add(new PatientTemperatureVo("赵六", "2020-01-27 08:12:46", 37.9));
        list.add(new PatientTemperatureVo("黄七", "2020-01-24 12:13:26", 37.1));
        list.add(new PatientTemperatureVo("黄七", "2020-01-27 12:43:26", 37.1));
        list.add(new PatientTemperatureVo("刘八", "2020-01-23 11:13:26", 36.1));
        list.add(new PatientTemperatureVo("刘八", "2020-01-28 12:13:26", 36.3));
        list.add(new PatientTemperatureVo("张三", "2020-01-23 12:13:26", 36.5));
        return list;
    }
}

当时真是硬磨了几个小时,完全不知道怎么下手太难了

附上解答:(有更简洁的解法欢迎指出)

/**
 * 要求对这组数据进行数据转换和计算处理,按照日期(精确到天)和病人分类数据, 用控制台输出即可
 * 输出示例:
 * 2020-01-23 2020-01-24 2020-01-25 2020-01-26
 * 张三   36.5       36.3       ...         ...       36.33(最后一列平均温度)
 * ...     ...       ...        ...         ...
 * 要求:
 * 1. 日期从小到大输出,
 * 2. 如果病人当日没有测试温度, 统一认为是 36.5 摄氏度(在控制台打出36.5)
 * 3. 计算平均温度
 * patientList只是参考数据,请不要写死
 *
 * @author lxx
 * @create 2021-02-28 17:10
 */

public class Demo1 {
    //日期转换格式
    static String toDate(String dateStr) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
        Date date = null;
        try {
            date = dateFormat.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateFormat.format(date);
    }

    public static void main(String[] args) {
        List<PatientTemperatureVo> list = getPatientList();
        //获取所有的日期,并排序输出
        ArrayList<String> dates = new ArrayList<>();
        list.stream().forEach(a -> {
            dates.add(toDate(a.dateStr));
        });
        List<String> collect = dates.stream().distinct().sorted().collect(Collectors.toList());
        System.out.print("\t");
        for (String s : collect) {
            System.out.print(s + "\t");
        }
        System.out.print("平均温度");
        System.out.println();
        ArrayList<vo> vos = new ArrayList<>();

        Map<String, List<PatientTemperatureVo>> map = list.stream().collect(Collectors.groupingBy(PatientTemperatureVo::getName));
        for (Map.Entry<String, List<PatientTemperatureVo>> entry : map.entrySet()) {
            vo vo = new vo();
            vo.setName(entry.getKey());
            ArrayList<Double> arrayList = new ArrayList<>();
            for (String s : collect) {
                List<PatientTemperatureVo> value = entry.getValue();
                Boolean b = false;
                for (PatientTemperatureVo temperatureVo : value) {
                    if (toDate(temperatureVo.getDateStr()).equals(s)) {
                        arrayList.add(temperatureVo.getTemperature());
                        b = true;
                    }
                }
                if (b == false) {
                    arrayList.add(36.5);
                }
            }
            vo.setTemperatures(arrayList);
            Double b = 0.0;
            for (Double temperature : vo.getTemperatures()) {
                b += temperature;
            }
            String avg1 = String.valueOf(b / vo.getTemperatures().size());
            vo.setAvg(avg1);
            vos.add(vo);
        }
        for (vo vo : vos) {
            System.out.print(vo.toString());
            System.out.println();
        }

    }

    static class PatientTemperatureVo {
        public String name;
        public String dateStr;
        public double temperature;

        public PatientTemperatureVo() {
        }

        public PatientTemperatureVo(String name, String dateStr, double temperature) {
            this.name = name;
            this.dateStr = dateStr;
            this.temperature = temperature;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getDateStr() {
            return dateStr;
        }

        public void setDateStr(String dateStr) {
            this.dateStr = dateStr;
        }

        public double getTemperature() {
            return temperature;
        }

        public void setTemperature(double temperature) {
            this.temperature = temperature;
        }

        @Override
        public String toString() {
            return "PatientTemperatureVo{" +
                    "name='" + name + '\'' +
                    ", dateStr='" + dateStr + '\'' +
                    ", temperature=" + temperature +
                    '}';
        }
    }

    static List<PatientTemperatureVo> getPatientList() {
        List<PatientTemperatureVo> list = new ArrayList<>();
        list.add(new PatientTemperatureVo("赵六", "2020-01-25 12:13:26", 37.2));
        list.add(new PatientTemperatureVo("王五", "2020-01-25 12:13:26", 36.5));
        list.add(new PatientTemperatureVo("张三", "2020-01-24 12:25:26", 36.2));
        list.add(new PatientTemperatureVo("李四", "2020-01-25 12:24:26", 36.5));
        list.add(new PatientTemperatureVo("李四", "2020-01-24 21:13:25", 36.9));
        list.add(new PatientTemperatureVo("张三", "2020-01-25 11:13:26", 36.7));
        list.add(new PatientTemperatureVo("张三", "2020-01-27 12:13:26", 36.3));
        list.add(new PatientTemperatureVo("张三", "2020-01-28 12:35:23", 36.4));
        list.add(new PatientTemperatureVo("李四", "2020-01-27 13:15:26", 37));
        list.add(new PatientTemperatureVo("李四", "2020-01-23 15:13:26", 36.6));
        list.add(new PatientTemperatureVo("赵六", "2020-01-24 12:13:26", 36.9));
        list.add(new PatientTemperatureVo("王五", "2020-01-27 12:25:54", 36.4));
        list.add(new PatientTemperatureVo("李四", "2020-01-26 12:13:26", 36.2));
        list.add(new PatientTemperatureVo("李四", "2020-01-28 19:13:26", 36.1));
        list.add(new PatientTemperatureVo("黄七", "2020-01-23 12:13:26", 36.9));
        list.add(new PatientTemperatureVo("黄七", "2020-01-26 06:13:26", 37.5));
        list.add(new PatientTemperatureVo("王五", "2020-01-23 12:13:26", 36.2));
        list.add(new PatientTemperatureVo("王五", "2020-01-24 18:13:21", 36.9));
        list.add(new PatientTemperatureVo("刘八", "2020-01-26 12:13:26", 36.8));
        list.add(new PatientTemperatureVo("黄七", "2020-01-25 12:13:26", 37.2));
        list.add(new PatientTemperatureVo("黄七", "2020-01-28 12:13:26", 35.9));
        list.add(new PatientTemperatureVo("赵六", "2020-01-26 12:14:26", 37.5));
        list.add(new PatientTemperatureVo("刘八", "2020-01-25 17:13:23", 36.5));
        list.add(new PatientTemperatureVo("王五", "2020-01-26 12:13:26", 36.8));
        list.add(new PatientTemperatureVo("王五", "2020-01-28 12:13:26", 36.1));
        list.add(new PatientTemperatureVo("赵六", "2020-01-27 08:12:46", 37.9));
        list.add(new PatientTemperatureVo("黄七", "2020-01-24 12:13:26", 37.1));
        list.add(new PatientTemperatureVo("黄七", "2020-01-27 12:43:26", 37.1));
        list.add(new PatientTemperatureVo("刘八", "2020-01-23 11:13:26", 36.1));
        list.add(new PatientTemperatureVo("刘八", "2020-01-28 12:13:26", 36.3));
        list.add(new PatientTemperatureVo("张三", "2020-01-23 12:13:26", 36.5));
        return list;
    }
}

class vo {
    private String name;
    private List<Double> temperatures;
    private String avg;

    public vo() {
    }

    public vo(String name, List<Double> temperatures, String avg) {
        this.name = name;
        this.temperatures = temperatures;
        this.avg = avg;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Double> getTemperatures() {
        return temperatures;
    }

    public void setTemperatures(List<Double> temperatures) {
        this.temperatures = temperatures;
    }

    public String getAvg() {
        return avg;
    }

    public void setAvg(String avg) {
        this.avg = avg;
    }

    @Override
    public String toString() {
        StringBuffer stringBuffer = new StringBuffer();
        for (Double temperature : temperatures) {
            stringBuffer.append(temperature + "\t\t");
        }
        return name + "\t" + stringBuffer + avg;
    }
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值