繁体   English   中英

如何基于Java中的自定义逻辑对字符串列表进行排序

[英]How to sort list of string based on custom logic in java

我有一个带有值的数组列表... ST1000,ST 5000,ST 30000,ST400,ST500,SP1000,SP600

我希望将其分类为ST1000,ST2000,ST3000,ST4000,SP600,SP1000 ..我该怎么做?

谢谢

您可以使用compareTo将按字典顺序为您比较

这是使用Java 8对列表进行排序的2种方法

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

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

使用Java 8,您不必使用Collections.sort方法

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

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

在您的特定情况下,它将如下所示:

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;
        }
    }
});

您可以创建自定义的Comparator对象,并使用所需的逻辑覆盖compare方法。

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

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

       };

如果compare返回-1,则arg0小于arg1,0等于大于1

然后使用自定义比较器对列表进行排序

         Collections.sort(list, customComparator);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM