简体   繁体   English

在Java中使用collection.sort对字符串进行排序

[英]Sorting string using collection.sort in java

I am a beginner in Java and I am having a problem sorting String. 我是Java的初学者,对String排序时遇到问题。 I know using Collections.sort it will sort String with case-sensitive by default but the uppercase ones always come in the front because it always compares the ASCII values. 我知道使用Collections.sort默认情况下会区分大小写对String进行排序,但是大写字母总是排在最前面,因为它总是比较ASCII值。

If I want to keep lowercase String in front of uppercase ones, is there a clean way to implement it in Java using Collections.sort ? 如果我想将小写的String放在大写的String前面,是否有一种干净的方法可以使用Collections.sort在Java中实现它?

For example, to sort "java Python ruby C" into "java ruby C Python". 例如,将“ java Python ruby​​ C”排序为“ java ruby​​ C Python”。

Thanks in advance. 提前致谢。

You should implement your own Comparator to define such an ordering: 您应该实现自己的Comparator来定义这样的顺序:

Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        if (/* s1 is lower case and s2 is upper case */) {
            return 1;
        }

        if (/* s1 is upper case and s2 is lower case */) {
            return -1;
        }

        return s1.compareTo(s2);
    }
});

Of course you can use a Comparator . 当然,您可以使用Comparator。 Use Collections.sort(List<String> x,Comparator comp)

This is achieved by creating a Comparator that will impelemt the compare method. 这是通过创建一个将执行compare方法的Comparator来实现的。

Here is example of using AgeComparator: 这是使用AgeComparator的示例:

import java.util.Comparator;

public class HeightComparator implements Comparator<Object> {

    @Override
    public int compare(Object o1, Object o2) {
        int p1 = ((Person)o1).height;
        int p2 = ((Person)o2).height;
        return p1 - p2;
    }
}

Now all that left is to pass our custom comparator with the collection we want to compare. 现在剩下的就是将我们的自定义比较器与我们要比较的集合一起传递。

Collections.sort(peoples, new AgeComparator())

More on Comparators and Comparable can be read HERE . 有关比较器和可比性的更多信息,请点击这里

arshajii's answer is solid. arshajii的回答很可靠。 Here're the two minor conditional statements: 这是两个较小的条件语句:

Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        if (s1.toLowerCase().equals(s1) && s2.toUpperCase().equals(s2)) {
            return 1;
        }

        if (s1.toUpperCase().equals(s1) && s2.toLowerCase().equals(s2)) {
            return -1;
        }

        return s1.compareTo(s2);
    }
};

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

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