[英]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.