2014-02-17 41 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);