我正在尝试使用具有以下格式的文本对Label元素的数组列表进行排序:
" 1:咨询[某人] @ 14:15"
我的目标是通过时间变量对列表进行排序,特别是@和:之间的小时。为此,我使用for循环对数组列表进行排序,拉出标签项的文本并提取@和之间的整数:
在得到这个之后,我需要运行一个IF语句来检查Labels数组中的前一个Label是否有一个大于当前的时间,但是我很难在每个循环中获取前一个数组元素,这可能吗?到目前为止我的代码:
for (Label label : dailyConsults){
String s1 = label.getText();
s1 = s1.substring(s1.indexOf("@") +1);
int thisConsult = Integer.parseInt(s1.substring(0, s1.indexOf(":")));
String s2 = PREVIOUS LABEL IN THIS ARRAY LIST AND GET TEXT
s2 = s2.substring(s2.indexOf("@") +1);
int previousConsult = Integer.parseInt( s2.substring(0, s2.indexOf(":")));
//if previous label time is greater than the current in this loop then move up
if(Integer.parseInt(s2) > Integer.parseInt(s1)){
while (dailyConsults.indexOf(label) != 0) {
int j = dailyConsults.indexOf(label);
Collections.swap(dailyConsults, j, j - 1);
}
}
}
答案 0 :(得分:1)
鉴于您的dailyConsults
是List<Label>
,您可以考虑:
Collections.sort(dailyConsults, Comparator.comparingInt(label -> {
String s = label.getText();
s = s.substring(s.indexOf("@") +1);
return Integer.parseInt(s.substring(0, s.indexOf(":")));
}));
我使用的是Java 1.8;在早期版本中,它将需要更多代码行,但您可以使用相同的想法。