使用java中的collection.sort对字符串进行排序

时间:2014-03-08 20:19:32

标签: java sorting collections

我是Java的初学者,我在排序String时遇到了问题。我知道使用Collections.sort它会在默认情况下对区分大小写的String进行排序,但大写的总是在前面,因为它总是比较ASCII值。

如果我想将小写字符串保留在大写字符串前面,是否有一种使用Collections.sort在Java中实现它的简洁方法?

例如,将“java Python ruby​​ C”排序为“java ruby​​ C Python”。

提前致谢。

4 个答案:

答案 0 :(得分:3)

您应该实现自己的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);
    }
});

答案 1 :(得分:0)

当然你可以使用比较器。Use Collections.sort(List<String> x,Comparator comp)

答案 2 :(得分:0)

这可以通过创建Comparator来实现compare方法。

以下是使用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;
    }
}

现在剩下的就是将我们的自定义比较器传递给我们想要比较的集合。

Collections.sort(peoples, new AgeComparator())

有关Comparators和Comparable的更多信息,请参阅HERE

答案 3 :(得分:0)

arshajii的答案很可靠。这是两个小的条件陈述:

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