2015-03-19 44 views
0

我有一個字符串列表,我需要確保一個特定的元素始終在列表中的列表中。這裏是一個例子。假設我的清單包含[sicav action,droits de souscription,famille action,fcp actions]。我需要確保在進行進一步處理之前,「家庭行爲」總是處於第一位。限制列表中的一個元素位於頂部

這是我如何做的:

/** 
* Force this list to alway keep the constrained value on top 
* @param liste 
* @param constraint 
*/ 
public void doConstrainList(List<String> liste, String constraint) { 

    System.out.println("List initial state: " + liste); 
    if (!liste.contains(constraint)) { 
     return; 
    } 

    int indexToProcess = liste.indexOf(constraint); 

    String keeper = constraint; 

    liste.remove(indexToProcess); 
    liste.add(0, keeper); 

    System.out.println("List state after processing:" + liste); 
} 

當我把這種方法與上面mentionned爲同一約束值我得到以下結果

method invocation result

所以這個名單例子按預期工作,但我想知道是否有更好的方法來做到這一點。有可能這個名單會不斷增長,我不希望這種方法成爲時間消耗。我使用的是Java 1.6,我無法使用較新的Java版本。感謝您的幫助

+3

也許列表是不是最好的數據結構來使用。難道你不能創建一個自定義的類,它包含第一個元素和其餘的在列表中?這個類甚至可能實現列表接口,所以對於外部來說它只是一個列表,但在內部它可以維持這個約束。 – 2015-03-19 10:16:32

+0

@tobias_k。謝謝,我會研究這個選項。有關更多信息,List來自服務,並且該服務從Spring Data存儲庫中獲取。我在春天mvc控制器收到它。那是在將列表作爲模型的屬性發送到視圖之前必須應用此約束的時候。 – alainlompo 2015-03-19 10:23:42

+0

請嘗試使用priorityQueue? – 2015-03-19 10:24:51

回答

1

我想你可以通過重構你的代碼,這節省一些處理時間:

public void doConstrainList(List<String> liste, String constraint) { 

    System.out.println("List initial state: " + liste); 
    if (liste.remove(constraint)) { 
     liste.add(0, constraint); 
    } 

    System.out.println("List state after processing:" + liste); 
} 
+0

謝謝,這是一個很好的觀點。 – alainlompo 2015-03-19 11:39:45