用于对字符串数组进行排序的Java自定义比较器

问题描述 投票:0回答:1

[我在这里尝试对开头和结尾字母相同的字符串中的单词进行排序。应该将其排序,否则不要打扰。

import java.util.*;
public class MyClass {
public static void main(String args[]) {
  String arr[]={"zpppz","poop","zllo","bob","yea"};
  Arrays.sort(arr , new Comparator<String>(){
      public int compare(String a ,String b){
          if((a.charAt(0) == a.charAt(a.length()-1 ) )&&(b.charAt(0)==b.charAt(b.length()-1 ) )  ){
           return a.compareTo(b);
          }
          return 0;
      }
  } );
  for(String s: arr ) System.out.println(s);
}
} 

预期输出:“鲍勃”“船尾”“ zllo”“ zpppz”是的但即时通讯输出为:“鲍勃”“船尾”“ zpppz”“ zllo”“是”

java arrays sorting comparator
1个回答
0
投票

以下代码可以执行所需的操作,但不使用Comparator。如果不可接受,请告诉我,我将删除此答案。

String arr[] = {"zpppz", "poop", "zllo", "bob", "yea"};
List<Integer> indexList = new ArrayList<>();
List<String> words2sort = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
    if (isCandidate(arr[i])) {
        indexList.add(Integer.valueOf(i));
        words2sort.add(arr[i]);
    }
}
if (words2sort.size() > 0) {
    Collections.sort(words2sort);
    int index = 0;
    String[] sorted = new String[arr.length];
    for (int i = 0; i < arr.length; i++) {
        if (index < indexList.size() && indexList.get(index).intValue() == i) {
            sorted[i] = words2sort.get(index);
            index++;
        }
        else {
            sorted[i] = arr[i];
        }
    }
    System.out.println(Arrays.asList(sorted));
}

运行上述代码的结果:

[bob, poop, zllo, zpppz, yea]
© www.soinside.com 2019 - 2024. All rights reserved.