繁体   English   中英

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

[英]Java Custom Comparator for sorting array of strings

在这里,我试图对开头和结尾字母相同的字符串中的单词进行排序。 它应该在适当的位置进行排序,否则不会受到干扰。

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

预期 output:“bob”“poop”“zllo”“zpppz”“是的”,但我得到 output 为:“bob”“poop”“zpppz”“zllo”“是的”

将 Comparator 与选择排序之类的东西一起使用怎么样?

public class Test {
    public static void main(String args[]) {
        String arr[]={"zpppz","poop","zllo","bob","yea"};
        Comparator<String> comparator = new Comparator<>() {
            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;
            }
        };
        selectionSort(arr, comparator);
    }

    static <T> void selectionSort(T[] a, Comparator<T> c) {
        for (int i = 0; i < a.length; i++) {
            for (int j = i; j < a.length; j++) {
                if (c.compare(a[i], a[j]) > 0) {
                    T hold = a[i];
                    a[i] = a[j];
                    a[j] = hold;
                }
            }
        }
    }
}

结果:[鲍勃,便便,zllo,zpppz,是的]

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

private static boolean isCandidate(String word) {
    boolean candidate = false;
    if (word != null && word.length() > 0) {
        candidate = word.charAt(0) == word.charAt(word.length() - 1);
    }
    return candidate;
}
/**********************************************************/
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]

暂无
暂无

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

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