2014-02-17 62 views
0

我有一個IList<string>,並希望通過基於以下情形這份名單下令: 與「ABS」留在頂部開始元素和其他人會以正常的方式進行排序as String.CompareTo自定義排序依據爲IList的

任何人都可以請幫忙。

+3

什麼具有u試過嗎? – Ademar

回答

0

試圖實現自定義比較

List<String> strings = new ArrayList<String>(); 
    strings.add("abs"); 
    strings.add("a"); 
    strings.add("b"); 
    strings.add("bb"); 
    strings.add("ac"); 
    strings.add("c"); 
    Collections.sort(strings, new Comparator<String>() { 
     @Override 
     public int compare(String o1, String o2) { 
      if (o1.equalsIgnoreCase("abs")) { 
       return -1; 
      } else if (o2.equalsIgnoreCase("abs")) { 
       return 1; 
      } else { 
       return o1.compareTo(o2); 
      } 
     } 
    }); 

更新我認爲這是Java標籤被改變了。不知道上面的代碼是否有幫助

1

您應該實現自定義IComparer並使用列表的排序方法。

List<T>.Sort Method (IComparer<T>)

Example

0
var abs = list.Where(e = e.StartsWith("abs")).OrderBy(e => e); 
var rest = list.Except(abs).OrderBy(e => e); 

var result = abs.Concat(rest); 
2

佩蒂這個簡單的代碼:

stringArray.OrderBy(x => x.StartsWith("abs") ? 0: 1).ThenBy(x => x);