我是一名Java 8的新手,正在学习阶段。我需要使用Java 8编写以下逻辑。我有一个Json Array数据,我的json结构如下。
{"list":[{"core":{"min":281.556,"max":286.67,"top":972.73},"dt":"2017-02-16 12:00:00"},{"core":{"min":281.821,"max":285.66,"top":970.91},"dt":"2017-02-16 15:00:00"},{"core":{"min":274.498,"max":277.05,"top":970.44},"dt":"2017-02-16 18:00:00"},{"core":{"min":271.503,"max":272.78,"top":969.32},"dt":"2017-02-16 21:00:00"}]}
这个jsonArray中包含了大约100个jsonObject,每3小时就会有一组数据。我需要使用Java 8 stream或其他Java 8特性来分别找到最小值和最大值的平均值,并且还需要分别计算顶部的平均值。另一个条件是最小值和最大值的平均值应该基于白天或黑夜。如果dt包含06:00、09:00、12:00或15:00这些时间,那么它应该是日间平均值(白天最小值+最大值),否则就应该是夜间平均值(黑夜最小值+最大值)。顶部不受白天或黑夜的影响。非常感谢您的帮助。
以下是使用Java 7进行登录。需要使用Java 8特性重新实现。
int dayavg=0;
int nightavg = 0;
int topavg=0;
int day=0;
int night = 0;
int top=0;
for(int i=0;i<50;i++){
JsonNode node = list.get(i);
String dt = node.get("dt").textValue();
if(dt.contains("06:00:00")|| dt.contains("09:00:00") || dt.contains("12:00:00") || dt.contains("15:00:00")){
int val = node.get("core").get("min").asInt() + node.get("core").get("max").asInt();
day = day + val;
}
if(dt.contains("18:00:00")|| dt.contains("21:00:00") || dt.contains("00:00:00") || dt.contains("03:00:00")){
int val = node.get("core").get("min").asInt() + node.get("core").get("max").asInt();
night = night + val;
}
int val = node.get("core").get("top").asInt();
top = top + val;
}
topavg = top/50;
dayavg = day/100;
nightavg = night/100;