2016-09-30 50 views
0

我试图梳理与具有以下格式文本标签元素的数组列表:如何根据标签文本对标签数组列表进行排序? JavaFX的

“1:[人]请教@ 14:15”

我的目标对列表进行排序通过时间变量,特别是@和:之间的小时。要做到这一点,我通过使用每个循环的数组列表进行排序,拉动标签项的文本并提取@和之间的整数:

得到这个之后,我需要运行一个IF语句来检查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); 
         } 
        } 
       } 
+1

解决方案:不要使用for-each循环。 – immibis

+0

只是想知道为什么要在创建标签之前将“标签列表

+0

@IchichiUchiha,好主意。排序字符串可能会更好地分离用户界面和业务逻辑。 –

回答

1

鉴于您的dailyConsultsList<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;在较早的版本中,它将需要更多的代码行,但您可以使用相同的想法。