我需要将一组ArrayList数据转换为另一组ArrayNist数据。我需要将"原始数据"转换为下面的"需要的结果"。基本上,我有日期和时间的时间块,需要查看哪些数据集在同一日期的同一时间范围内并保存。不幸的是,算法真的不适合我。有什么想法吗?
日期是字符串。如果我之前没有澄清,我很抱歉。
selectedTimeSlotTracker data:
{
("2020-03-04",4,"10:00", "10:30"),
("2020-03-04",5,"10:30", "11:00"),
("2020-03-04",8,"12:00", "12:30"),
("2020-03-04",9,"12:30", "13:00"),
("2020-03-05",8,"12:00", "12:30"),
("2020-03-05",9,"12:30", "13:00")
}
summaryObjects:
{
("2020-03-04","10:00", "11:00"),
("2020-03-04","12:00", "13:00"),
("2020-03-05","12:00", "13:00")
}
private void transformSelectedToSummaryObjects(){
summaryObjects.clear();
int indexOfSummaryObjects = 0;
for (int i = 0; i < selectedTimeSlotTracker.size(); i++ ){
summaryObjects.add(new SummaryObject(selectedTimeSlotTracker.get(i).getDate(), selectedTimeSlotTracker.get(i).getStartTIme(), selectedTimeSlotTracker.get(i).getEndTime()));
for (int j = i; j < selectedTimeSlotTracker.size()-1; j++){
if (selectedTimeSlotTracker.get(j).getDate().equals(selectedTimeSlotTracker.get(j+1).getDate())){
if(selectedTimeSlotTracker.get(j).getEndTime().equals(selectedTimeSlotTracker.get(j+1).getStartTIme())) {
summaryObjects.get(indexOfSummaryObjects).setEndTime(selectedTimeSlotTracker.get(j+1).getEndTime());
i = j + 1;
}
}
}
indexOfSummaryObjects++;
}
courtReservationSummaryAdapter.notifyDataSetChanged();
}
这是我的尝试。不幸的是,它并没有创造干净的休息时间,只是把不同日期的结束时间拼凑成同一个日期。
下面是我用summaryObjects数组列表的方法得到的数据集,这是错误的。
{(2020-03-04,"10:00", "13:00")}
我几天后回来后会发布更多信息。
将日期部分解析为LocalDate
。
LocalDate ld = LocalDate.parse( "2020-03-04" ) ;
将一天中的时间值解析为LocalTime
。
LocalTime lt = LocalTime.parse( "10:00" ) ;
加入他们制作LocalDateTime
。
LocalDateTime ldt = LocalDateTime.of( ld , lt ) ;
通过调用isEqual
、isBefore
和isAfter
来比较LocalDateTime
对象。提示:问"这个日期时间等于或在另一个日期时间之后吗?"的一种较短方法是问"这个时间不是在另一日期时间之前吗?"。
你应该能够算出其余的逻辑。理解java.time类使用不可变对象。因此,您将创建新实例,而不是修改现有对象。搜索堆栈溢出以了解更多信息,因为这一切已经处理了很多。
您甚至可能想要编写自己的小类,用一对LocalDateTime
对象来表示时间跨度,这些对象的名称类似于LocalDateTimeSpan
。要获得灵感,请查看ThreeTen Extra库及其Interval
&CCD_ 11类。