/**
* 要求对这组数据进行数据转换和计算处理,按照日期(精确到天)和病人分类数据, 用控制台输出即可
* 输出示例:
* 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;
}
}
运行结果: