业务场景:
模拟直播时间获得,上下节课,以及《直播专题》的下一节课,已经播完的课等等;
分析:
实际就是查看当前时间在所有时间中位置
实现:
BeanDate (直播专栏中每个子直播课)
public class BeanDate {
private String code;
private LocalDateTime st;
private LocalDateTime end;
public String getCode() {
return code;
}
public LocalDateTime getSt() {
return st;
}
public LocalDateTime getEnd() {
return end;
}
public void setCode(String code) {
this.code = code;
}
public void setSt(LocalDateTime st) {
this.st = st;
}
public void setEnd(LocalDateTime end) {
this.end = end;
}
}
模拟实现:
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
/**
* @version 1.0
* @Description TODO
* @date 2020-12-24 13:06
*/
public class DateTrans {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
BeanDate A = new BeanDate();
A.setCode("asd123");
A.setSt(now.minusDays(10));
A.setEnd(now.minusDays(9));
BeanDate B = new BeanDate();
B.setCode("asd456");
B.setSt(now.minusDays(5));
B.setEnd(now.plusDays(1));
BeanDate C = new BeanDate();
C.setCode("asd789");
C.setSt(now.plusDays(2));
C.setEnd(now.plusDays(3));
List<BeanDate> BeanDates = new ArrayList<>();
BeanDates.add(A);
BeanDates.add(B);
BeanDates.add(C);
/**---------------------------------------方法体--------------------------------------------**/
// 当前时间在BC之间
List<LocalDateTime> sortList = new ArrayList();
for (BeanDate bean:
BeanDates) {
sortList.add(bean.getSt());
sortList.add(bean.getEnd());
}
sortList.add(now);
Collections.sort(sortList, (o1, o2) -> {
if(o1.isAfter(o2)){
return 1;
}else if (o1.isBefore(o2)){
return -1;
}else {
return 1;
}
});
for (LocalDateTime a:
sortList) {
System.out.println(a);
}
// 找到元素下标并获取前后两个值,注意开头,结尾
int index = sortList.indexOf(now);
System.out.println(index);
LocalDateTime bd;
LocalDateTime ad;
BeanDate beanDate;
if(index == 0){
// 如果元素为第一个,获取下标为1的作为开始时间查询
bd = sortList.get(1);
beanDate = BeanDates.stream().filter(item -> item.getSt().equals(bd)).findFirst().get();
System.out.println("整体未开始"+beanDate.getCode());
// 得到第一个(整体未开始)
}else if(index == sortList.size()-1){
// 如果元素为最后一个,获取下标为sortList.size()-1的作为结束时间查询
ad = sortList.get(sortList.size()-1);
beanDate = BeanDates.stream().filter(item -> item.getEnd().equals(ad)).findFirst().get();
System.out.println("整体已结束"+beanDate.getCode());
// 得到最后一个(整体已经播完)
}else {
// 属于中间位置,取前后位置查询是否有,有返回,没有则往后推下标查找
bd = sortList.get(index - 1);
ad = sortList.get(index + 1);
Optional<BeanDate> cartOptional = BeanDates.stream().filter(item -> item.getSt().equals(bd)).findFirst();
if(cartOptional.isPresent()){
// 此时存在则在一个课程开始时间之后则在这个beanDateBd课程之内(直播中)。
BeanDate beanDateBd = cartOptional.get();
System.out.println("进行中"+beanDateBd.getCode());
}else {
// 不存在则此beanDate已经结束,此课程已经结束(前位时间不是开始时间则为结束时间,处于一个课程结束之后)
BeanDate beanDateBd = BeanDates.stream().filter(item -> item.getEnd().equals(bd)).findFirst().get();
System.out.println("结束"+beanDateBd.getCode());
// 此课程未开始(下个课程)
BeanDate beanDateAd = BeanDates.stream().filter(item -> item.getSt().equals(ad)).findFirst().get();
System.out.println("未开始,下一节课:"+beanDateAd.getCode());
}
}
}
}
注:转载注明出处
就是为了赚点积分,并不是啥高深代码,,,,,哈哈