我需要排序一个数组,其中匹配的项目出现,而其他将下降。
为了快递。我有一个数组: z、asxdf、abasdf、abcasdf、b、bc、bcd、c ,我需要的是当我传递一个KeyWord假设"b"时,它应该对给定的数组进行排序,其中以b.开头的所有字符串都将放在第一位,其余的则放在第一位。它将产生最终输出: b,bc,bcd,z,c,.(rest).
如果可以在Java中使用比较器呢?
String keyWord = "b";
String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
Arrays.sort(s, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//Code to sort array according to need
}
});
System.out.println(Arrays.toString(s));
Result -> [ b , bc , bcd , z , c , ...]
(我可以使用List而不是Array,或者其他任何帮助我解决这个问题的方法)
发布于 2013-06-25 06:19:42
在回答是否可以使用比较器进行比较时,答案是肯定的:您只需要创建一个新的比较器类,而不是创建一个匿名比较器,如下所示:
class MyComparator implements Comparator<String> {
private final String keyWord;
MyComparator(String keyWord) {
this.keyWord = keyWord;
}
@Override
public int compare(String o1, String o2) {
if(o1.startsWith(keyWord)) {
return o2.startsWith(keyWord)? o1.compareTo(o2): -1;
} else {
return o2.startsWith(keyWord)? 1: o1.compareTo(o2);
}
}
}
然后在代码中使用比较器:
String keyWord = "b";
String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
Arrays.sort(s, new MyComparator(keyWord));
System.out.println(Arrays.toString(s));
发布于 2013-06-25 06:42:19
因为关键字匹配后的字符串长度似乎很重要,下面是我的版本:
Arrays.sort(s, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
boolean o1Has = o1.startsWith( keyWord );
boolean o2Has = o2.startsWith( keyWord );
if( o1Has && !o2Has ) return -1;
else if( o2Has && !o1Has ) return 1;
else if( o1Has && o2Has ) return 0;
else
return o1.length() - o2.length();
}
});
产量:
b,bc,bcd,z,c,asxdf,abasdf,abcasdf
发布于 2013-06-25 06:14:32
final String keyWord = "b";
String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
Arrays.sort(s, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
boolean o1_has_keyWord = o1.indexOf(keyWord.charAt(0)) == 0 && o1.contains(keyWord);
boolean o2_has_keyWord = o2.indexOf(keyWord.charAt(0)) == 0 && o2.contains(keyWord);
if (o1_has_keyWord && o2_has_keyWord)
{
if (o1.length() == o2.length())
{
if (o1.indexOf(keyWord.charAt(0)) > o2.indexOf(keyWord.charAt(0))){
return -1;
}
else if (o1.indexOf(keyWord.charAt(0)) == o2.indexOf(keyWord.charAt(0))){
return 0;
}
else
{
return 1;
}
}
else if (o1.length() > o2.length())
{
return 1;
}
else
{
return -1;
}
}
else if (o1_has_keyWord && !o2_has_keyWord)
{
return -1;
}
else if (!o1_has_keyWord && o2_has_keyWord)
{
return 1;
}
return 0;
//Code to sort array according to need
}
});
System.out.println(Arrays.toString(s));
输出:
[b, bc, bcd, z, asxdf, abasdf, abcasdf, c]
https://stackoverflow.com/questions/17290105
复制相似问题