2016-05-17 50 views
0

定制逻辑我有值... ST1000一个ArrayList,ST 5000,ST 30000,ST400,ST500,SP1000,SP600如何基于Java中

我希望它Ø进行分类排序一样串的名单ST1000,ST2000,ST3000,ST4000,SP600,SP1000 ..我该怎么做?

感谢

+0

哪些值列表?某种物体?你可以发布你写的代码吗? –

+0

@OlimpiuPOP - 不,它只是字符串值! – AngryJS

+0

我的代码还没有任何排序,如果它会是对象,我想使用比较器,但它的只是字符串值:( – AngryJS

回答

0

可以使用compareTo这会比较它为你按字典

这里有2种方法使用Java 8

list.stream() 
    .sorted((s1, s2) -> s1.compareTo(s2)).collect(Collectors.toList()); 

list.sort((s1, s2)->s1.compareTo(s2)); 

使用Java 8排序列表,你不” t必须使用Collections.sort方法

0

您可以使用Collections.sort(List<T> list, Comparator<? super T> c)以期望的方式对任何集合进行排序 方法。

您所需要做的就是相应地实现Comparator'scompare方法。

在您的特定情况下,它会去是这样的:

List<String> list = Arrays.asList("ST1000", "ST5000", "ST30000", "ST400", "ST500", "SP1000", "SP600"); 
Collections.sort(list, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     String o1Prefix = o1.substring(0, 2); 
     String o2Prefix = o2.substring(0, 2); 
     if (o1Prefix.equals(o2Prefix)) { 
      return Integer.parseInt(o1.substring(2, o1.length())) > Integer.parseInt(o2.substring(2, o2.length())) ? 1 : -1; 
     } else if (o1Prefix.equals("ST")) { 
      return -1; 
     } else { 
      return 1; 
     } 
    } 
}); 
0

您可以创建一个自定义的比较对象和比较重载方法与所需的逻辑。

Comparator<Model> customComparator = new Comparator<Model>() { 

     public int compare(Model arg0, Model arg1) { 
      //TODO custom sort logic 
     } 

     }; 

如果比较返回-1那么arg0都小于ARG1,0等于1大于

然后进行排序使用自定义比较

  Collections.sort(list, customComparator);