Создайте ArrayList, который реализует RandomAccess для ваших данных. Реализуйте Comparator на вашем объекте hour: minute. Поместите ваш массив в этот список для обработки и сортируйте его.
Как обычно, выберите часы и минуты из текущего времени.
Выполните Collections.binarySearch (), чтобы получить индекс элемента списка, который соответствует или следующий в строке, и вернуть его (это поведение по умолчанию для binarySearch).
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.RandomAccess;
public class scratchpad {
public static void main(String [] args){
String[] hourMinuteStringArray = {"6:58","7:41","8:08","8:28","8:48","9:08","9:43","10:13","10:43","11:13","11:43","12:09","12:29","12:49","13:09","13:29","13:49","14:09","14:29","14:49","15:09","15:29","15:49","16:09","16:29","16:49","17:09","17:29","17:49","18:29","19:09","19:47","20:27","21:07","21:47","22:27"};
HourMinuteList hourMinuteList = convertHMStringArrayToHMArray(hourMinuteStringArray);
Collections.sort(hourMinuteList);
Calendar calendar = new GregorianCalendar();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
scratchpad s = new scratchpad();
HourMinute now = s.new HourMinute(hour,minute);
System.out.println("Now is " + hour + ":" + minute);
int nearestTimeIndex = Collections.binarySearch(hourMinuteList, now);
if(nearestTimeIndex < 0){
nearestTimeIndex = nearestTimeIndex * -1 -1;
}
System.out.println("Next time is " + ((HourMinute) hourMinuteList.get(nearestTimeIndex)).getHour() + ":" + ((HourMinute) hourMinuteList.get(nearestTimeIndex)).getMinuteString());
}
private static HourMinuteList convertHMStringArrayToHMArray(String[] times){
scratchpad s = new scratchpad();
HourMinuteList list = s.new HourMinuteList();
for(String time : times ){
String[] splitTime = time.split(":");
int hour = Integer.parseInt(splitTime[0]);
int minute = Integer.parseInt(splitTime[1]);
HourMinute hm = s.new HourMinute(hour,minute);
list.add(hm);
}
return list;
}
class HourMinuteList extends ArrayList implements RandomAccess{
}
class HourMinute implements Comparable {
int hour;
int minute;
public HourMinute(int hour, int minute) {
setHour(hour);
setMinute(minute);
}
int getMinute() {
return this.minute;
}
String getMinuteString(){
if(this.minute < 10){
return "0" + this.minute;
}else{
return "" + this.minute;
}
}
int getHour() {
return this.hour;
}
void setHour(int hour) {
this.hour = hour;
}
void setMinute(int minute) {
this.minute = minute;
}
@Override
public int compareTo(Object aThat) {
if (aThat instanceof HourMinute) {
HourMinute that = (HourMinute) aThat;
if (this.getHour() == that.getHour()) {
if (this.getMinute() > that.getMinute()) {
return 1;
} else if (this.getMinute() < that.getMinute()) {
return -1;
} else {
return 0;
}
} else if (this.getHour() > that.getHour()) {
return 1;
} else if (this.getHour() < that.getHour()) {
return -1;
} else {
return 0;
}
}
return 0;
}
}
}