2016-09-30 35 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;在較早的版本中,它將需要更多的代碼行,但您可以使用相同的想法。

相關問題