创建实现了RandomAccess为您的数据的ArrayList。在你的小时:分钟对象上实现一个比较器。把你的数组放入这个列表中进行处理和排序。
抓住从以正常方式当前时间的小时和分钟。
执行一个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;
}
}
}
感谢您的代码。我绝对可以想出它,但你为我节省了一些时间。我不得不做出一些改变,但你的建议是现货。谢谢! – tgai 2010-04-24 15:22:20